Skip to main content

手写 instanceof

思路:

  1. 获取参数 1 的原型__proto__:Object.getPrototypeOf
  2. 获取参数 2 的构造函数的原型 prototype
  3. while 递归
    • 条件:while(true){}
    • 参数 1 原型为 null 直接 return false
    • 比较参数 1 原型和参数二构造函数原型
    • 查找上一级参数 1 的原型__proto__

接受两个参数,判断第二个参数是不是在第一个参数的原型链上

function myInstanceof(args1,args2) {
let args1Poto = Object.getPrototypeOf(args1) // left.__proto__
let args2Prototype = args2.prototype // 获得构造函数的原型

while (true) {
// null
if(args1Poto === null){return false}
// 找到
if(args2Prototype === args1Poto) return true
// 检查原型(递归)
// 没有找到就把上一层原型拿过来,继续递归,再向上一层找
args1Poto = Object.getPrototypeOf(args1Poto)
}
}

使用方法:

myInstanceof([],Array)