intanceof 操作符的实现原理及实现

352 阅读1分钟
function myInstanceof(left, right) {
  // 获取对象的原型
  let proto = Object.getPrototypeOf(left)
  // 获取构造函数的 prototype 对象
  let prototype = right.prototype; 
 
  // 判断构造函数的 prototype 对象是否在对象的原型链上
  while (true) {
    if (!proto) return false;
    if (proto === prototype) return true;
    // 如果没有找到,就继续从其原型上找,Object.getPrototypeOf方法用来获取指定对象的原型
    proto = Object.getPrototypeOf(proto);
  }
}
注:
1、left myInstanceof right 相当于myInstanceof(left, right)
2Object.getPrototypeOfObject.prototype区别?
Object 本身是一個 函数,Object.prototype 不是 Object 這一对象的原型,而是 Obejct 這一函数的 函数原型,也就是 new Object() 的原型。
而 Object.getPrototypeOf(Object) 是把 Object 這一函数看作对象,返回的是 函数对象 的 原型,也就是 Function.prototypefunction Empty() {} 了。