JavaScript中的深度继承?

3

我知道在JavaScript中可以通过以下方式进行简单的原型继承:

var Parent = function() {
};

var Child = function() {
}

Child.prototype = new Parent();
Child.prototype.constructor = Child;

不过,我很好奇如何实现更深层次的继承?多重继承是否也可以实现?

1个回答

6

在JavaScript中,您无法进行多重继承。但是,您可以通过简单地进一步深入来实现更深层次的继承:

var Parent = function() {};
var Child = function() {};
var InnerChild = function() {};

并且为了展示它的工作原理:

Parent.prototype.x = 100;
Child.prototype = new Parent();
Child.prototype.y = 200;   
InnerChild.prototype = new Child();
InnerChild.prototype.z = 300;

var ic = new InnerChild();
console.log(ic.x); //prints 100, from Parent
console.log(ic.y); //prints 200, from Child
console.log(ic.z); //prints 300, from InnerChild, who only wants to express itself

好的回答。我想补充一点,虽然你不能进行多重继承,但是使用“混入”方法并不难,例如可以使用jQuery或underscore.js等库提供的“extend”函数。 - Jacob Mattison
我不明白为什么这不是多重继承(如果你在JavaScript中可以进行继承的话)。这里有一个扩展函数,它还具有使超类方法可用的附加好处:var extend = function (classObject, superClass) { for (var i in superClass.prototype) { if (classObject.prototype[i]) classObject.prototype["super" + i] = superClass.prototype[i]; else classObject.prototype[i] = superClass.prototype[i]; } }; - rob
扩展(extend)有点像多重继承,虽然它不是真正的多重继承,而是"将一个对象的所有属性添加到另一个对象中"。例如,instanceof不能正常工作。无论如何,在javascript中应用面向对象编程技术都是愚蠢的,因为它实际上是原型继承。编写一些代码并说"这是多重继承"只会混淆问题。 - Claudiu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接