实现 instanceof 操作符
instanceof
原理:
instanceof
可以正确判断对象的类型,其内部运行机制是判断在其原型链中能否找到该类型的原型。
instanceof
主要的实现原理就是只要右边变量的 prototype
在左边变量的原型链上即可。
instanceof
在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype
,如果查找失败,则会返回 false。
function myInstanceof(left,right) {
//先用typeof判断基础数据类型,如果是,直接返回false
if(typeof left !== 'object' || left === null) {
return false;
}
//getPrototypeOf能够拿到参数的原型对象(显式原型)
let proto = Object.getPrototypeOf(left);
while(true){
if(proto === null) {//如果找到了原型链的尽头
return false;
}
if(proto === right.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
}
//验证
console.log(myInstanceof(new Number(123),Number));//true
console.log(myInstanceof(123,Number));//false