美文网首页前端大杂烩
实现 instanceof 运算符

实现 instanceof 运算符

作者: lio_zero | 来源:发表于2021-04-30 13:40 被阅读0次

MDN:instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

实现思路

判断右边变量的原型是否存在于左边变量的原型链上。通过实例对象属性的 __proto__ 去一层层查找,如果和构造函数的 prototype 相等则返回 true,如果一直没有查找成功则返回 false

function myInstanceOf(left, right) {
  if (typeof instance !== 'object' && typeof instance !== 'function') {
    return false
  }
  // 实例对象属性,指向其构造函数原型
  let leftValue = left.__proto__
  // 构造函数原型
  let rightValue = right.prototype
  while (true) {
    // 如果为 null,说明原型链已经查找到最顶层了,真接返回 false
    if (leftValue === null) return false
    // 查找到原型
    if (leftValue === rightValue) return true
    // 继续向上查找
    leftValue = leftValue.__proto__
  }
}

理解原型的继承机制可以很好的帮助你理解这层关系。

相关文章

网友评论

    本文标题:实现 instanceof 运算符

    本文链接:https://www.haomeiwen.com/subject/fadnlltx.html