// 自己实现 instance,left 代表 instanceof 左值,right代表 instanceof 右值 function instance(left, right) { let proto = Object.getPrototypeOf(left); let prototype = right.prototype; while (true) { // 如果传入的 left 的原型不存在,则直接返回 false if (!proto) { return false; } // 如果传入的 right 刚好是 left 的上一级,则直接返回 true if (proto === prototype) { return true; } // console.log(proto); // 否则将当前 left的原型 赋值为 left原型的原型(上一级原型)进入循环继续比较 proto = Object.getPrototypeOf(proto); } } // 测试 function Animal(name) { this.name = name; } function Cat(color) { this.color = color; } Cat.prototype = new Animal("cat1"); let cat1 = new Cat("gray"); console.log(cat1); // Animal { color: 'gray' } console.log(Object.getPrototypeOf(cat1)); // Animal { name: 'cat1' } console.log(Object.getPrototypeOf(Cat)); // {} console.log(Object.getPrototypeOf(Animal)); // {} console.log(Object.getPrototypeOf(Object.getPrototypeOf(cat1))); // {} console.log(cat1 instanceof Cat); // true console.log(cat1 instanceof Animal); // true console.log(cat1 instanceof Object); // true console.log(Animal instanceof Object); // true console.log("==========================="); console.log(instance(cat1, Cat)); // true console.log(instance(cat1, Animal)); // true console.log(instance(cat1, Object)); // true console.log(instance(Animal, Object)); // true