通过原型链实现instanceof

  1. instanceof用法
    objInstance instanceof Obj:判断 实例objInstance 是否是 Obj对象类型, 返回值是 true||false
    [] instanceof Array // ==> true

  2. 通过在对象的原型链中查找类型的prototype

关于原型的知识点:每个函数都有 prototype 属性,除了Function.prototype.bind(),该属性指向原型
每个对象都有__proto__属性,指向了创建该对象的构造函数的原型

function instanceof(instance, Obj){
      // 获取该类型的原型
      let prototype = Obj.prototype;
      // 通过对象实例的__proto__属性获取对象的原型
      let instancePrototype = instance.__proto__;
      // 使用while链式查找原型
      while(true){
            // 当查找到Object,Object.__proto__ === null,说明并未找到对应的对象类型
            if(instancePrototype === null)
                  return false
            // 对象的类型等于类型的原型
            if(prototype === instancePrototype)
                  return true
            // 链式查找类型的原型
            instancePrototype = instancePrototype.__proto__;
      }
}
posted @ 2020-05-22 14:42  XyanZhang  阅读(139)  评论(0)    收藏  举报