理解instanceof原理
Opened this issue · 0 comments
juanjuan2wei commented
理解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都没找到的时候,说明它并不是这个引用类型的实例。