一、instanceof原理

instanceof 主要的实现原理就是只要右边构造函数的 prototype 在左边实例的原型链上即可。因此,instanceof 在查找的过程中会遍历实例的原型链,直到找到右边变量的prototype,如果查找失败,则会返回 false

二、手写instanceof

  1. function instance_of(L, R) { // L 表示instanceof左边,R 表示instanceof右边
  2. let O = R.prototype; // 取 R 的显示原型
  3. L = L.__proto__; // 取 L 的隐式原型
  4. while (true) { // 循环执行,直到 O 严格等于 L
  5. if (L === null) return false;
  6. if (O === L) return true;
  7. L = L.__proto__; // 获取祖类型的__proto__
  8. }
  9. }