javascript 中 instanceof 的执行机制
在javascript中我们通过instanceof来判断对象是否是某个构造函数的实例,本篇文章将讲述JS是如何判断这种关系的。
先进行原理说明,对于someObj instanceof someFunc,JS会获取someFunc.prototype,同时获取someObj._proto_,然后判断someFunc.prototype === someObj._proto_,如果为真,则instanceof返回真,如果为假,则获取someObj._proto_._proto_,然后再判断someFunc.prototype === someObj._proto_._proto_,按照此规则从someObj的原型链中遍历所有的_proto_,一直到Object.prototype,如果在遍历的过程中有_proto_和someFunction.prototype全等,则返回真。
然后用具体代码说明:
1 function A(){...} 2 function B(){...} 3 B.prototype = new A(); 4 var b = new B(); 5 console.log(b instanceof A);
以上代码输出true
function A(){...} function B(){...} B.prototype = new A(); var b = new B(); A.prototype = new Object(); console.log(b instanceof A);
以上代码输出false,因为创建了B的实例后,改变了A.prototype的指向,导致b._proto_._proto_ ≠ A.prototype。