【前端手撕】instanceof

instanceof是利用原型链来判断元素是否是某个构造函数的实例,原理是看构造函数的prototype是否在实例的原型链上。

当我们写 a instanceof F 时,JS 引擎在底层做的是链式查找:

  1. 先获取 F.prototype(构造函数的显式原型)。

  2. 然后获取 a 的隐式原型(a.__proto__,即 Object.getPrototypeOf(a))。

  3. 循环比较:a 的当前原型 === F.prototype 吗?如果不相等,就顺着链条往上走:a.__proto__.__proto__...

  4. 如果链条最终指向了 null 还没找到,返回 false;一旦中途匹配,立即返回 true。

代码

javascript 复制代码
function myInstanceof(left, right) {
    const prototype = right.prototype
    let proto = Object.getPrototypeOf(left)
    while (true) {
        if (proto === null) return false
        if (proto === prototype) return true
        proto = Object.getPrototypeOf(proto)
    }
}
相关推荐
深蓝AI4 小时前
Meta 开源用了八年的设计系统 astryx:连坐两天 GitHub 总榜第一,组件库开始写给 agent 的说明书
前端·人工智能
IT_陈寒5 小时前
Vue的watch把我坑惨了,原来要这样用才靠谱
前端·人工智能·后端
1-1=05 小时前
Vue 3 模板语
前端·javascript·vue.js
用户7610304473715 小时前
【转战智能眼镜开发】ROKID AIUI 小游戏 亚马逊标枪项目实战讲解
前端
风卿6 小时前
看着AI写代码太孤独了,来欣赏星云吧:一个DSH 装饰插件
前端·javascript
牧艺6 小时前
弹层不用再手算坐标了:CSS Anchor Positioning 从原理到可上线
前端·javascript·css
用户老李6 小时前
YOLO 目标检测自学教程 07:YOLOv3——多尺度预测
前端
moshuying6 小时前
ESP32 墨水屏金价牌(上):从点亮到把图片推过去
前端
李剑一7 小时前
别再抬杠,前端岗已经没了!无论前后端,我们最终都要成“全干”工程师
前端·面试
Highcharts.js7 小时前
Highcharts 仪表盘与速度仪图表库介绍
前端·信息可视化·仪表板·highcharts·图表开发·图表库·仪表可视化