instanceof手写

525 阅读1分钟

instanceof手写

要想自己手写instanceof操作符,首先要明白这个在js中怎么使用以及它的原理

function Person() {}
var p = new Person()
p instanceof Person 

由上面代码可以,instanceof操作符,左边是一个实例,右边是一个构造函数。它的原理:在这个实例p的整条原型链上,是否有指向Person.prototype这个对象的引用

明白上诉原理我们在注意以下几点就可以手写instanceof操作符了

  1. 可以通过p.proto.proto ... 这种方式从下往上获取原型对象
  2. 通过Objec.create(null)的实例是没有原型链
  3. 有原型链的实例的尽头都是Object
function myInstanceof(a, fn) {
    if(!a.__proto__) return false // 排除没有原型链的对象同时规避掉传入的不是对象的情况
    if(fn === Object || a.__proto__ === fn.prototype)  return true // 一步步对比尽头是Object
    return myInstanceof(a.__proto__, fn)  // 递归
}