0

メソッドを確認したところinstanceof、結果は同じではありません。

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

prototype最初に(参照) プロパティを割り当てましたA

A.prototype = B.prototype;
var carA =  new A();

console.log( B.prototype.constructor );
console.log( A.prototype.constructor == B );
console.log( B.prototype.constructor == B );
console.log( carA  instanceof A );
console.log( carA  instanceof B );

上記の最後の 4 つの条件は を返しますtrue

しかしconstructor、 B .. を代入しようとすると、結果は同じではありません。

A.prototype.constructor = B.prototype.constructor;
var carA =  new A();

console.log( B.prototype.constructor );
console.log( A.prototype.constructor == B );
console.log( B.prototype.constructor == B );
console.log( carA  instanceof A );
console.log( carA  instanceof B );

この場合、をcarA instanceof B返しますfalse。false を返す理由

4

1 に答える 1

1

リンクから回答が見つかりました.. https://stackoverflow.com/a/12874372/1722625

instanceof[[Prototype]]実際に左側のオブジェクトの内部をチェックします。以下同様

function _instanceof( obj , func ) {
    while(true) {
       obj = obj.__proto__; // [[prototype]] (hidden) property
       if( obj == null) return false;
       if( obj ==  func.prototype ) return true;
    }
}

// which always true 
console.log( _instanceof(carA , B ) == ( obj instanceof B ) ) 

true を返す場合、B objですinstanceof

于 2013-07-17T14:30:55.183 に答える