不按套路出牌的 instanceof
重要程度: 5
在下面的代码中,为什么 instanceof
会返回 true
?我们可以明显看到,a
并不是通过 B()
创建的。
function A() {}
function B() {}
A.prototype = B.prototype = {};
let a = new A();
alert( a instanceof B ); // true
是的,看起来确实很奇怪。
instanceof
并不关心函数,而是关心函数的与原型链匹配的 prototype
。
并且,这里 a.__proto__ == B.prototype
,所以 instanceof
返回 true
。
总之,根据 instanceof
的逻辑,真正决定类型的是 prototype
,而不是构造函数。