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