【前端手撕】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)
    }
}
相关推荐
a1117763 小时前
莱茵生命终端 网页 html
前端·开源
水月清辉3 小时前
CSS 常用语法详解
前端·css
Eric_见嘉4 小时前
打开这个 VSC 设置「组件引用位置」和数量就都清楚了
前端·typescript·visual studio code
李高钢4 小时前
Python Tornado 框架入门:从零搭建你的第一个异步 Web 应用
前端·python·tornado
宁风4 小时前
JavaScript:函数体系-1
前端·javascript
mmsx4 小时前
Android 手簿 ADB 无线调试全攻略:USB 转 WiFi 一键连接
android·前端
guwentian4 小时前
Rolldown vs esbuild vs Webpack:Rust 打包器大战我们该怎么选
前端·webpack·rust·esbuild
特立独行的猫A4 小时前
用纯 Rust 重写 Podcastfy:把网页、PDF 和一段文字,变成一档双人对话播客
前端
oooo_z5 小时前
美股历史K线数据API接口选型指南:iTick覆盖1分钟到月线全周期
服务器·前端·javascript
今日无bug5 小时前
从 0 到 1 搭建端侧 AI 项目:DeepSeek-R1 + WebGPU + React + TS + Tailwind 全栈笔记
前端·react.js·typescript