instanceof原理
其原理就是看实例对象的__proto__的原型对象和构造函数prototype的原型对象是不是同一个
console.log(o2 instanceof M) // true
console.log(o2.__proto__ === M.prototype) // true
console.log(o2 instanceof Object) // true
console.log(o2.__proto__.__proto__ === Object.prototype) // true
// 所以如果有继承,用instanceof判断就不严谨,可以用constructor
function myInstanceof(obj, fn) {
return obj.__proto__.constructor === fn
}
// 手写instanceof
function instance_of(obj, newFunc) {
let leftObj = obj.__proto__
let targetObj = newFunc.prototype
while(true) {
if(leftObj === null) {
return false
}
if(leftObj === targetObj) {
return true
}
leftObj = leftObj.__proto__
}
}