重学js-instanceof

82 阅读1分钟

a instanceof A

定义:

实例对象是否和构造函数在一条原型链上

解决的问题: 判断引用类型。基础数据类型不由构造函数创建

原理: 实例对象的隐式原型对象,能否找到构造函数的显示原型对象,如何可以就是对应实例。

原型和 ————proptype什么区别。

构造函数具备propotype属性,是一个指针指向其显示原型。

也就是说平时,自己所写的构造函数.propotype是一个属性. 本质依然是指针。

对象原型(隐式原型)

原型对象(Function.prototype指向的对象)

显示原型(对象)

隐式原型(指针)

弊端

1 基于原型链机制,查找耗时,同时无法判断基础数据类型。无法精确判断对象

let instanceOf = (left, right) => {
  //返回对象原型,或者叫隐式原型
  let _proto = Object.getPrototypeOf(left);
  let Protype = right.prototype

  while (true) {
    if (_proto === Protype) {
      return true
    }
    // 返回对象原型
    _proto = Object.getPrototypeOf(left);
    if (_proto === null) {
      return false
    }
  }

}

let test = instanceOf({}, Object)
console.log('test', test)