不按套路出牌的 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,而不是构造函数。