instanceof主要作用就是判断一个实例是否属于某种类型

let Dog = function(){
    
}
let tidy = new Dog()
tidy instanceof Dog //true

原理大概如下

function wonderFulInstanceOf(instance, constructorFn) { 
    let constructorFnProto = constructorFn.prototype; // 取右表达式的 prototype 值, 函数构造器指向的function 
    instanceProto = instance.__proto__; // 取左表达式的__proto__值,实例的__proto__
    while (true) {
    	if (instanceProto === null) {
            return false;	
        }
        if (instanceProto === constructorFnProto) {
            return true;	
        } 
        instanceProto = instanceProto.__proto__ 
    }
}

其实 instanceof 主要的实现原理就是只要 constructorFn 的 prototype 在instance的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false,告诉我们左边变量并非是右边变量的实例。