返回課程

奇怪的 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 實際上定義了類型,而不是建構函式。