当前位置:首页 > JavaScript

实现instanceof js

2026-01-31 19:08:20JavaScript

实现 instanceof 操作符

JavaScript 中的 instanceof 操作符用于检测一个对象是否是某个构造函数的实例。以下是手动实现 instanceof 功能的几种方法。

实现instanceof js

方法一:原型链遍历

通过递归遍历对象的原型链,检查是否与目标构造函数的 prototype 属性匹配。

实现instanceof js

function myInstanceof(obj, constructor) {
  let proto = Object.getPrototypeOf(obj);
  while (proto) {
    if (proto === constructor.prototype) {
      return true;
    }
    proto = Object.getPrototypeOf(proto);
  }
  return false;
}

方法二:直接使用原型链

利用 Object.prototype.isPrototypeOf 方法,检查目标构造函数的 prototype 是否在对象的原型链上。

function myInstanceof(obj, constructor) {
  return constructor.prototype.isPrototypeOf(obj);
}

方法三:结合 constructor 属性

通过检查对象的 constructor 属性是否指向目标构造函数。

function myInstanceof(obj, constructor) {
  return obj && obj.constructor === constructor;
}

注意事项

  1. 原始类型(如 numberstringboolean)无法通过 instanceof 检测,因为它们不是对象。
  2. 如果目标构造函数的 prototype 被修改,instanceof 的结果可能会变化。
  3. 跨框架或窗口的对象检测可能失效,因为不同全局环境中的构造函数不共享原型。

示例测试

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

console.log(myInstanceof(p, Person)); // true
console.log(myInstanceof([], Array)); // true
console.log(myInstanceof({}, Object)); // true

以上方法均能模拟 instanceof 的核心功能,根据具体需求选择合适的方法。

标签: instanceofjs
分享给朋友:

相关文章

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…