3

我试图让一个对象从其他两个对象继承,但这样做不起作用,我怎样才能让它工作?

function a() {

};

a.prototype.iamA = function() {
alert("a");
};  

function b() {

};

b.prototype.iamB = function() {
alert("b");
};

function ab() {

};

ab.prototype = new a();
ab.prototype = new b();

console.log(new ab());

似乎原型被覆盖了我该如何添加它,我也尝试将它添加到原型中,但这也不起作用?

4

1 回答 1

8

使用对象扩展而不是赋值,例如:

function extend(obj, source) {
    for (var prop in source) {
       obj[prop] = source[prop];
    }
    return obj;
}

然后:

ab.prototype = extend(new a(), new b());         (1)

或者您可以选择使用下划线的扩展功能

ab.prototype = _.extend({}, new a(), new b());   (2)

编辑

严格来说,这是mixin而不是真正的多继承,因为 (new ab instanceof b) === false在 (1) 和 (2) 中。

有关更多信息,请查看此参考:No multiple Inheritance

也就是说,mixin 对你来说可能已经足够了。事实证明,认为需要继承的人通常只需要代码重用,而不需要与类型相关的构造。对于像 JavaScript这样的动态类型(或鸭子类型)语言尤其如此。

于 2013-05-05T09:24:53.613 回答