JavaScript 手写仿instanceof

定义

MDN 中,描述是这样的。
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。

实现一个仿instanceof功能的"_instanceof"函数,该函数可以判断首参的原型链中是否在第二个Fn构造函数的原型的 prototype 属性,核心步骤有:

  1. 获取首个对象参数的原型对象
  2. 获取Fn函数的原型对象
  3. 进入死循环,当两个参数的原型对象相等时返回true
  4. 当两个参数的原型对象不相等时获取首个对象参数原型的原型并且循环该步骤直到null时返回false
javascript 复制代码
const _instanceof = (target, Fn) => {
    let proto = target.__proto__
    let prototype = Fn.prototype
    while(true) {
        if(proto === Fn.prototype) return true
        if(proto === null) return false
        proto = proto.__proto__
    }
}

这里要了解一下原型与原型链

相关推荐
名字还没想好☜14 小时前
Go slice 的 append 陷阱:共享底层数组导致的数据串改
开发语言·后端·golang·go·slice
bitbrowser14 小时前
Claude 账号频繁被封?转向国内可直接使用的 AI 工具
开发语言·php
An_s15 小时前
机器学习python之识别图中物品信息
java·linux·开发语言
小雪_Snow15 小时前
JavaScript 中的三种常用事件
开发语言·前端·javascript
肖爱Kun15 小时前
C++设计策略模式
开发语言·c++·策略模式
蓝胖子酱15 小时前
在 Electron 中用 electron-store 实现加密存储与自定义格式文件
前端·javascript·数据库
灯澜忆梦15 小时前
GO_面向对象_方法
开发语言·golang
布朗克16815 小时前
Go 入门到精通-16-字符串深入
开发语言·后端·golang·字符串
北冥you鱼16 小时前
Go flag 包详解:从命令行解析到实战应用
开发语言·后端·golang
To_OC16 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode