手写 instanceof
思路:
- 获取参数 1 的原型
__proto__
:Object.getPrototypeOf - 获取参数 2 的构造函数的原型 prototype
- 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)