javascript原型构造函数和instanceof

时间:2013-07-17 13:29:09

标签: javascript jquery javascript-objects

当我检查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

但是当我尝试分配B的constructor时......结果不一样。

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

1 个答案:

答案 0 :(得分: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,objinstanceof B