レッスンに戻る

奇妙な 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 の論理では、実際にはプロトタイプが型を定義し、コンストラクタ関数は定義しません。