回到课程

不按套路出牌的 instanceof

重要程度: 5

下面代码中,instanceof 为什么会返回 true?很显然,a 并不是通过 B() 创建的。

function A() {}
function B() {}

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

确实挺诡异的。

instanceof 并不关心构造函数,它真正关心的是原型链。

这里有 a.__proto__ == B.prototype 成立,所以 instanceof 返回了 true

总之,按照 instanceof 的逻辑,真正决定类型的是 prototype,而不是构造函数。