手写实现js中的instanceof

// 自己实现 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

 

posted @ 2022-06-06 22:30  蓓蕾心晴  阅读(91)  评论(0编辑  收藏  举报