源码实现instanceof方法

1,741 阅读1分钟

/*

instanceOf原理:

temp 通过 __proto__向上查的时候,若有某次的 __proto__===classN.prototype就返回true

当某次的__proto__===null 就但会false

*/

function myInstanceof(temp,classN){

var left = temp.__proto__;//让left=instanceof的左支

var right = classN.prototype;//让right=instanceof的右支

let str = typeof temp;先用typeof检测传进来的temp

if(str !=== 'Object' && str !=='function')return false;//如果这个检测结果不是对象也不是函数就返回false

while(left){//左支存在

if(left === right)return true;//如果左支=右支

left = left.__proto__;//让左支回到最初

}

return false;//否则返回false

}

 myInstanceof([], Number);//false
myInstanceof([], Array);//true