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。

posted @ 2015-12-08 09:29  比昂  阅读(365)  评论(0编辑  收藏  举报