JavaScript多重继承和instanceof

Pet*_*tah 6 javascript inheritance prototype multiple-inheritance ecmascript-5

可能重复:
Javascript多重继承

有没有办法在JavaScript中执行此操作:

Foo = function() {

};

Bar = function() {

};

Baz = function() {
    Foo.call(this);
    Bar.call(this);
};

Baz.prototype = Object.create(Foo.prototype, Bar.prototype);

var b = new Baz();
console.log(b);
console.log(b instanceof Foo);
console.log(b instanceof Bar);
console.log(b instanceof Baz);
Run Code Online (Sandbox Code Playgroud)

那么Baz既是Foo又是Bar的一个例子?

Ama*_*dan 8

JavaScript没有多重继承.instanceof测试原型链,这是线性的.但是,你可以使用mixins,这基本上就是你正在做的事情Foo.call(this); Bar.call(this).但它不是继承; 在Object.create,第二个参数只提供要复制的属性,而不是父级.

  • @streetlight:不.在JavaScript中,我认为测试功能比测试父母更有意义.也就是说,你继承自"狗"; 而不是`if(x instanceof Dog)x.bark()`,你会写`if(x.bark)x.bark();`(或更安全但更详细,`if(typeof(x.bark) =="function")x.bark()`). (3认同)