奇妙な 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
は実際にはコンストラクタ関数ではなく型を定義します。