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,告诉我们左边变量并非是右边变量的实例。