use*_*919 3 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();
console.log(new ab());
Run Code Online (Sandbox Code Playgroud)
似乎原型被覆盖我如何添加它,我也尝试将它添加到原型但这也不起作用?
使用对象扩展而不是赋值,例如:
function extend(obj, source) {
for (var prop in source) {
obj[prop] = source[prop];
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
然后:
ab.prototype = extend(new a(), new b()); (1)
Run Code Online (Sandbox Code Playgroud)
或者您可以选择使用下划线的扩展功能.
ab.prototype = _.extend({}, new a(), new b()); (2)
Run Code Online (Sandbox Code Playgroud)
编辑:
严格地说,这是mixin而不是真正的多继承,因为
(new ab instanceof b) === false在(1)和(2)中都是如此.
有关更多信息,请查看此参考:无多重继承.
也就是说,mixin对你来说已经足够了.事实证明,认为需要继承的人通常只需要代码重用,而不需要与类型相关的构造.对于像JavaScript 这样的动态类型(或鸭子类型)语言尤其如此.