为什么Javascript中的instanceof运算符表现异常?

时间:2018-11-09 23:16:32

标签: javascript prototype prototypal-inheritance

我有此代码:

"nil"

为什么'instanceof'运算符对Bar返回true?我用Foo创建的新的空对象替换Bar的'.prototype'属性,那么'instanceof'运算符如何知道我调用Bar来实例化该对象?到目前为止,我对'instanceof'的理解是它检查对象的 proto 链并检查对象上的'.constructor'属性。但是在这种情况下,Bar.prototype是一个空对象,不包含引用Bar的'.constructor'属性。这是否与'instanceof'运算符本身的实现有关,还是我在某个地方弄错了?

1 个答案:

答案 0 :(得分:0)

此处原型链为bar .__ proto__-> Bar.prototype -> Bar.prototype .__ proto__-> Foo.prototype -> Object.prototype ->空

  

instanceof运算符测试构造函数的prototype属性是否出现在对象的原型链中的任何位置。   https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof

bar instanceof Bar;

那么,Bar构造函数( Bar.prototype )的prototype属性是否出现在bar的原型链中的任何地方?并以粗体显示在该链中。

bar instanceof Foo; 

那么,Foo构造函数的原型属性( Foo.prototype )是否出现在bar的原型链中的任何位置?并以粗体显示在该链中。

还请注意,此处的Foo或Bar的构造函数并不重要,仅是bar链中的原型。