juanjuan2wei/Blog

理解instanceof原理

Opened this issue · 0 comments

理解instanceof原理

我们知道instanceof是用来检测类型的,其语法如下:

result = variable instanceof constructor

返回一个布尔值,判断变量是否是给定引用类型的实例(根据原型链判断)

具体如何实现我们看下面代码

function instanceof(left, right) {

   const rightVal = right.prototype

   const leftVal = left.__proto__

   while(true) {

       if (leftVal === null) {
           return false
       }

       if (leftVal === rightVal) {
           return true
       }

       leftVal = leftVal.__ proto __ // 获取祖类型的__ proto __
   }
}

显而易见,每一次leftVal会给自己赋值 leftVal = leftVal.__ proto __,

这个函数将会一直顺着原型链网上找,先会找到自身构造函数的原型 constractor.prototype

下一步 constractor.prototype.__ proto __ === Function.prototype

下一步 Function.prototype.__ proto __ === Object.prototype

最后 Object.prototype.__ proto __ === null

也就是说如果当它找到最后为null都没找到的时候,说明它并不是这个引用类型的实例。