一段关于如何实现instanceof的代码

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__
为什么在循环里面又会重复的设置呢???求解

阅读 2.1k
2 个回答

这不是重复设置,每次循环会检查left 是否为 null 和是否等于 prototype,如果条件都不成立,那就把left.__proto__赋值left
换成下面这样是不是好理解一些了,当第一次循环的时候,上面的if语句的obj === left.__proto__,如果if都不满足,在结尾重新赋值,进入第二次循环的时候,obj === left.__proto__.__proto__.然后一次次循环,直到obj === null或者obj === prototype结束.

function instanceOf(left, right) {
  // 获得类型的原型
  let prototype = right.prototype
  // 获得对象的原型
  obj = left.__proto__
  // 判断对象的类型是否等于类型的原型
  while (true) {
    if (obj === null) return false
    if (obj === prototype) return true
    obj = obj.__proto__
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题