返回课程

奇怪的 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 实际上定义了类型,而不是构造函数。