instanceOf的原理
instanceOf 判断左边的值是否在右边的值的原型上。 例如: 判断 [] instanceOf Array 会返回ture, instanceOf 会遍历左边值的原型链来看他是否在右边值的prototype上,如果在就返回 true,否则返回false
function instanceOf (left, right) {
// 获取左边的上一级原型链
let proto = left.__proto__
while(proto){
// 如果左边的原型在右边的原型链,返回true
if (proto === right.prototype) {
return true
}
// 获取下一级原型链
proto = proto.__proto__
}
// 循环到 null,直接返回false,则表示左边不在右边的原型上
return false
}
// 测试
console.log(instanceOf([], Array)) // true
console.log(instanceOf({}, Object)) // true
console.log(instanceOf({}, Array)) // false