javascript继承模式混淆

标签 javascript jquery

我发现这是在 javascript 中进行继承的最推荐方式。

function extend(Child, Parent) {
 var F = function(){};
 F.prototype = Parent.prototype;
 Child.prototype = new F();
}

如果我已经在 child 的原型(prototype)中有方法,他们会不会被覆盖,我们不应该保留它们吗?

function extend(Child, Parent) {
 var c = child.prototype;
 var oldProto = new C();  
 var F = function(){};
 F.prototype = Parent.prototype;
 Child.prototype = new F();
 for(var i in oldProto ){
   Child.prototype[i] = oldProto[i]  
 }  
}

最佳答案

我不确定这对您是否有好处,但请务必记住:原型(prototype)与类不同。你所做的是试图让 JS 表现得像传统的 OO 语言,这是试图教一只海豚跳芭蕾舞,或者强制一只老虎成为素食主义者:令人钦佩,但注定要以泪水收场。

我真的不明白你为什么要使用 extend 函数来做你想做的任何事情。为什么不简单地使用这个:

function Parent()
{};
function Child()
{};
//augment parent proto
Parent.prototype.parentMethod1 = function()
{};
//set Child's proto to Parent
Child.prototype = new Parent();
Child.prototype.constructor = Child;
//Then augment the Child's prototype
Child.prototype.childMethod1 = function()
{};
var foo = new Child();
foo.parentMethod1();//works
foo.childMethod1();//works, too

IMO,这完全解决了问题。当然,它有点冗长,但 OOP 总是如此。

关于javascript继承模式混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12950456/

相关文章:

jQuery - 有多个 $(document).ready(function() {}); 是不是很糟糕?

javascript - 在 node.js 中从何处以及如何提供文件

javascript - AJAX:提交表单而不刷新页面

javascript - MaterializeCSS 多选不工作

javascript - Bootstrap 模式不会从包含 AJAX 调用创建的内容的模式中显示

jQuery 'each' 函数和 'this' 变量

javascript - 从方法调用 JavaScript 函数内的 jQuery

javascript - 如何将关联数组从 PHP 传递到 HTML 以进行进一步处理

javascript - 为 querySelectorAll 添加异常

javascript - 函数中的非分隔参数