レッスンに戻る

奇妙な instanceof

重要性: 5

なぜ下の instanceoftrue を返すのでしょう? aB() によって作られたものでないことは簡単に分かります。

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

A.prototype = B.prototype = {};

let a = new A();

alert( a instanceof B ); // true

はい、確かに奇妙に見えます。

しかし、instanceof は関数を気にするのではなく、プロトタイプチェーンに対してマッチする prototype について気にします。

そして、ここでは a.__proto__ == B.prototype なので、instanceoftrue を返します。

従って、instanceof のロジックに基づいて、prototype は実際にはコンストラクタ関数ではなく型を定義します。