当前位置:首页 > JavaScript

js instanceof实现

2026-02-02 11:07:44JavaScript

instanceof 的实现原理

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在对象的原型链上。其核心逻辑是通过递归遍历对象的原型链,与构造函数的 prototype 属性进行比较。

手动实现 instanceof

以下是一个手动实现 instanceof 功能的代码示例:

js 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;
}

使用示例

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([], Object)); // true
console.log(myInstanceof([], Function)); // false

实现要点

  • 使用 Object.getPrototypeOf 获取对象的原型
  • 通过循环不断向上查找原型链
  • 每次比较当前原型是否等于构造函数的 prototype 属性
  • 如果找到匹配则返回 true,如果原型链尽头(null)仍未找到则返回 false

注意事项

  • 原始类型(如数字、字符串等)使用 instanceof 会始终返回 false
  • 如果右侧不是可调用的构造函数(如普通对象),会抛出 TypeError
  • 跨框架对象检测可能会有问题,因为不同框架有各自的全局环境

标签: jsinstanceof
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现变形

js实现变形

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

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现定位

js实现定位

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

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…