当前位置:首页 > JavaScript

实现instanceof js

2026-04-05 11:24:44JavaScript

实现 instanceof 操作符

JavaScript 中的 instanceof 操作符用于检测构造函数的 prototype 属性是否出现在对象的原型链中。以下是手动实现 instanceof 的方法:

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

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

  return false;
}

工作原理

  1. 获取对象的原型和构造函数的 prototype 属性
  2. 沿着原型链向上查找,比较当前原型是否等于构造函数的 prototype
  3. 如果找到匹配则返回 true,否则直到原型链尽头返回 false

使用示例

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({}, Array)); // false

注意事项

  1. 原始值(如 'string', 42, true)使用 instanceof 会始终返回 false
  2. 如果构造函数的 prototype 被修改,instanceof 的结果也会相应变化
  3. 跨框架对象检测可能不可靠,因为不同执行环境有不同的全局对象

替代方案

对于更可靠的类型检查,可以考虑使用:

Object.prototype.toString.call(obj) === '[object Array]'

或 ES6 引入的:

实现instanceof js

Array.isArray(obj)

标签: instanceofjs
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…