function instanceof(left, right) {
// 获得类型的原型
let prototype = right.prototype
// 获得对象的原型
left = left.__proto__
// 判断对象的类型是否等于类型的原型
while (true) {
if (left === null)
return false
if (prototype === left)
return true
left = left.__proto__
}
}
感觉自己做了两年前端做了个假前端,完全不明白这段代码的意思啊,在while外面明明设置left=left.__proto__
为什么在循环里面又会重复的设置呢???求解
这不是重复设置,每次循环会检查
left
是否为null
和是否等于prototype
,如果条件都不成立,那就把left.__proto__
赋值left
换成下面这样是不是好理解一些了,当第一次循环的时候,上面的
if
语句的obj === left.__proto__
,如果if
都不满足,在结尾重新赋值,进入第二次循环的时候,obj === left.__proto__.__proto__
.然后一次次循环,直到obj === null
或者obj === prototype
结束.