我试图像往常一样用Object.create
做一些继承。但是前几天我重新确定了,constructor
也是prototype
的属性,所以我的子实例看起来像是父实例。好吧没什么大不了的,我试着修复它,这里是代码片段:
var Parent = function() {
}
var Child = function() {
Parent.apply(this, arguments);
}
Child.prototype = Object.create(Parent.prototype);
// now I tried to fix that bad constructor
Child.prototype.constructor = Child;
一切都很好:
var first = new Child();
first.constructor === Child; // true
first.constructor === Parent; // false
然后我发现:
first instanceof Child; // true
first instanceof Parent; // true - HUH?!?
我的意思是,这很好,但我不明白它发生在哪里。 有人可以解释一下吗?谢谢
答案 0 :(得分:3)
这很好,但我不明白它发生在哪里。有人可以解释一下吗?
instanceof
operator与.constructor
属性没有任何关系 - 它只检查原型链。您使用Object.create
正确设置的是Parent.prototype.isPrototypeOf(first)
。