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