• 手写实现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
  • 相关阅读:
    linkedLoop
    loopqueue
    expect 切换用户
    二叉树的实现
    栈的链表实现, 底层使用链表
    栈的数组实现
    RSA加密算法
    输入一个链表,反转链表后,输出链表的所有元素
    输入一个链表,输出该链表中倒数第k个结点
    ansible中include_tasks和import_tasks
  • 原文地址:https://www.cnblogs.com/beileixinqing/p/16350000.html
Copyright © 2020-2023  润新知