instanceof

/**
 * instanceof 判断左边的原型是否存在于右边的原型链中
 * 逐层往上查找原型,如果最终的原型为 null ,证明不存在原型链中,否则存在。
 *
 * @param {*} left 检查对象
 * @param {*} right 参考对象
 */
function _instanceof(left, right) {
  if (typeof left !== "object" || left === null) return false; // 基础类型一律为 false
  let proto = Object.getPrototypeOf(left); // 获得实例对象的原型,也就是 left.__proto__
  let prototype = right.prototype; // 获得构造函数的原型

  while (true) {
    if (proto === null) return false;
    if (proto === prototype) return true;
    proto = Object.getPrototypeOf(proto); // 没找到就把上一层拿过来,继续循环,再向上一层找
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Last Updated: 8/30/2024, 9:21:59 AM