конструктор прототипов javascript и instanceof

Когда я проверил метод 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 . Почему он возвращает ложь


person rab    schedule 17.07.2013    source источник


Ответы (1)


Я нашел ответ по ссылке.

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, obj равно instanceof B

person rab    schedule 17.07.2013