【问题标题】:JavaScript multiple inheritance and instanceof [duplicate]JavaScript多重继承和instanceof [重复]
【发布时间】:2013-01-12 12:30:07
【问题描述】:

可能重复:
Javascript multiple inheritance

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

所以 Baz 既是 Foo 又是 Bar 的一个实例?

【问题讨论】:

  • 这是在这个问题上讨论过的:stackoverflow.com/questions/7373644/…
  • @IsmaelGhalimi 就是这样。我确实读过那个问题,而且只有它被接受的答案。虽然那里有答案,但我不会称其为重复。
  • 让我再读一遍并回答你的问题。我可能错过了什么。对不起,如果我这样做了。
  • 另外一个问题的补充回答对这个问题是正确的。这并不意味着这个问题是那个问题的重复。

标签: javascript inheritance prototype multiple-inheritance ecmascript-5


【解决方案1】:

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

【讨论】:

  • 如果instanceof 不起作用,是否有另一种方法可以测试一个对象是否继承自两个不同的类?
  • @streetlight:不。在 JavaScript 中,我认为测试能力比测试亲子关系更有意义。也就是说,假设你继承自Dog;而不是if (x instanceof Dog) x.bark(),你应该写if (x.bark) x.bark();(或者更安全但更冗长,if (typeof(x.bark) == "function") x.bark())。
猜你喜欢
  • 1970-01-01
  • 2018-06-24
  • 1970-01-01
  • 2020-12-28
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多