当我检查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
答案 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,obj
为instanceof
B