var obj = new Object() obj instanceof Object // true
三、底层原理
1 2 3 4 5 6 7 8 9 10 11
function instance_of(L, R) { var O = R.prototype; L = L.__proto__; while (true) { if (L === null) return false; if (O === L) return true; L = L.__proto__; } }
function instance_of(L, R) { //L即yd R即YingDuan var O = R.prototype; //O为YingDuan.prototype,现在指向了cat L = L.__proto__; //L为yd._proto_,也随着prototype的改变而指向了cat while (true) { //执行循环 if (L === null) //不通过 return false; if (O === L) //判断是否 YingDuan.prototype ===yd._proto_ return true; //此时,两方都指Cat的实例对象cat,所以true L = L.__proto__; } }
再看一下“yd instanceof Cat”运行情况,即如何判断yd继承了Cat:
1 2 3 4 5 6 7 8 9 10 11
function instance_of(L, R) { // L即yd R即Cat var O = R.prototype; // O为Cat.prototype L = L.__proto__; //L为yd._proto_,现在指向的是cat实例对象 while (true) { // 执行循环 if (L === null) //不通过 return false; if (O === L) //判断是否 Cat.prototype === yd._proto_ return true; //此时,yd._proto_ 指向cat实例对象,并不满足 L = L.__proto__; //令L= yd._proto_._proto_,执行循环 } //yd._proto_ ._proto_,指的就是Cat.prototype,所以也返回true } //这就证明了yd继承了Cat