Javascript 如何使一个对象在其原型中继承两个对象?

Javascript 如何使一个对象在其原型中继承两个对象?,javascript,prototype,Javascript,Prototype,我试图使一个对象从另外两个对象继承,但这样做是行不通的,我如何使它工作 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(); consol

我试图使一个对象从另外两个对象继承,但这样做是行不通的,我如何使它工作

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());

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

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

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

或者您可以选择使用下划线

编辑

严格地说,这不是真正的多重继承,因为
(b的新ab实例)==false(1)和(2)

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

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

请注意,这既不会
inst instanceof a
也不会
inst instanceof b
允许在
inst
ab
的实例时计算为true。不管怎样,+1,因为这是我的建议谢谢,这正是我需要的:)@alex23首先,尽管OP提到了
inherit
,但mixin可能满足了他的需要(坚持继承的人通常只需要代码重用,而不需要键入相关的构造)。其次,我指出我的答案不是真正的多重继承,这不会误导未来的访问者。最后,你的答案也不是多重继承(请看我对它的评论)。这是不可能的。在JS中,一个对象只能从另一个对象继承(或
null
ab.prototype = extend(new a(), new b());         (1)
ab.prototype = _.extend({}, new a(), new b());   (2)