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__
    }
}