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