intanceof 检测数据类型是根据原型链上的构造函数来判断的,因此需要沿着原型链查找检测目标是否出现在对象的原型链上,如果出现就返回true,否则返回false。
function myInstanceof (obj,fn) {
//拿到obj的__proto__和fn的prototype
let proto = Object.getPrototypeOf(obj)
let prototype = fn.prototype
while(true) {
if(proto===null) {
return false
} else if(proto === prototype){
return true
} else {
proto = Object.getPrototypeOf(proto)
}
}
}