前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手写实现js中的instanceof

手写实现js中的instanceof

作者头像
蓓蕾心晴
发布2022-06-07 18:16:27
8550
发布2022-06-07 18:16:27
举报
文章被收录于专栏:前端小叙
代码语言:javascript
复制
// 自己实现 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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档