当前位置:首页 > JavaScript

js实现intanceof

2026-04-06 13:26:23JavaScript

js实现intanceof

实现 instanceof 的原理

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。手动实现需要遍历对象的原型链,并与构造函数的 prototype 进行比较。

js实现intanceof

基本实现代码

function myInstanceof(obj, constructor) {
  let proto = Object.getPrototypeOf(obj)
  const prototype = constructor.prototype

  while (true) {
    if (proto === null) return false
    if (proto === prototype) return true
    proto = Object.getPrototypeOf(proto)
  }
}

实现要点

使用 Object.getPrototypeOf() 获取对象的原型 通过 while 循环不断向上查找原型链 当找到匹配的原型时返回 true 当原型链顶端为 null 时返回 false

边界情况处理

// 处理基本数据类型
function myInstanceof(obj, constructor) {
  if (obj === null || typeof obj !== 'object') {
    return false
  }

  let proto = Object.getPrototypeOf(obj)
  const prototype = constructor.prototype

  while (true) {
    if (proto === null) return false
    if (proto === prototype) return true
    proto = Object.getPrototypeOf(proto)
  }
}

使用示例

function Person() {}
const p = new Person()

console.log(myInstanceof(p, Person)) // true
console.log(myInstanceof(p, Object)) // true
console.log(myInstanceof([], Array)) // true
console.log(myInstanceof(123, Number)) // false

与原生 instanceof 的区别

原生 instanceof 会检查对象的 Symbol.hasInstance 方法 原生 instanceof 对基本数据类型有特殊处理 此实现更关注原型链的核心机制

标签: jsintanceof
分享给朋友:

相关文章

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数:…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

实现继承js

实现继承js

实现继承的方式 在JavaScript中,实现继承可以通过多种方式完成,每种方式都有其优缺点。以下是几种常见的实现继承的方法: 原型链继承 原型链继承是最基本的继承方式,通过将子类的原型指向父类的实…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js实现图片移动

js实现图片移动

使用CSS和JavaScript实现图片移动 方法一:使用CSS动画结合JavaScript控制 通过CSS定义动画关键帧,JavaScript动态添加或移除动画类。 /* CSS部分 */ .m…

js 实现超链接

js 实现超链接

使用 HTML 的 <a> 标签 在 JavaScript 中动态创建超链接可以通过操作 DOM 实现。通过 document.createElement 创建一个 <a> 元…