看了篇文章讲instanceof实现原理,觉得通俗易懂,在此记录下
一句话简述,就是无限比对原型,直到原型对象相等
function myInstanceof (left, right) {
// 先判断是否是基础数据类型,如果是则直接return
if (typeof left !== 'object' || left === null) return false
// 获取实例的原型对象
let proto = Object.getPrototypeOf(left)
// 进入无限循环,直到找到相同的原型对象
while(true) {
if (proto === null) return false
if (proto === right.prototype) return true
proto = Object.getPrototypeOf(proto)
}
}
// test
myInstanceof(new String(123), String) //true
myInstanceof('123', String) //false