javaScript面试题:手写原生instanceof (简版)

59 阅读1分钟

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。instanceof 运算符的核心原理是:对象能否通过__proto__找到构造函数的原型。
代码如下

  <script>
    function myInstanceof(o, p) {
      // 构造函数的原型
      p = p.prototype
      // 对象的 __proto__
      o = o.__proto__
      while (true) {
        // 若p(即p.prototype)不能在o(原型链上找到)(即不全等),则返回false
        if (o === null) return false
        // 若p(即p.prototype)可以在(原型链上找到)(即全等),则返回true
        if (o === p) return true
        o = o.__proto__
      }
    }

    console.log(myInstanceof([], Object)) // 控制台打印结果true
    console.log(myInstanceof({}, Object)) // 控制台打印结果ttrue
  </script>