【前端手撕】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)
    }
}
相关推荐
恋猫de小郭6 分钟前
社区版 Dart macros?一个可以解决 JSON 序列化的Fluter “宏编程”第三方包
android·前端·flutter
2601_9657984742 分钟前
Contractor Web Setup: Deploying Bathrooms & Kitchens Theme Fast
前端·web3·php·wordpress
Dxy12393102161 小时前
Python XPath position() 完整使用指南,避坑合集(lxml适用)
前端·javascript·python
名字还没想好☜1 小时前
React 19 useOptimistic 实战:点赞评论先更新 UI,失败自动回滚
前端·javascript·react.js·ui·react·useoptimistic
晴天161 小时前
HarmonyOS 和 React 对比-Day22
前端·华为·harmonyos
海鸥两三1 小时前
【websocket合集2】websocket.js源码解析和页面调用示例
javascript·websocket·网络协议
AlienZHOU8 小时前
DeepSeek Harness 插件:HTML 实时可视化编辑
前端·agent·deepseek
欧阳天羲9 小时前
前端性能优化实战:从白屏到秒开
前端·性能优化
剪刀石头布啊10 小时前
javascript手动实现继承
前端
Elias不吃糖10 小时前
Langfuse 入门:Trace、Prompt、Dataset、Experiment、Evaluator
前端·python·prompt·langfuse