当前位置:首页 > JavaScript

实现instanceof js

2026-03-13 17:01:44JavaScript

实现 JavaScript 的 instanceof 操作符

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

方法一:递归实现

通过递归遍历对象的原型链,检查是否存在目标构造函数的 prototype

function myInstanceof(obj, constructor) {
  if (obj === null || typeof obj !== 'object') return false;
  let proto = Object.getPrototypeOf(obj);
  if (proto === constructor.prototype) return true;
  return myInstanceof(proto, constructor);
}

方法二:循环实现

通过循环遍历原型链,避免递归可能导致的栈溢出问题。

实现instanceof js

function myInstanceof(obj, constructor) {
  if (obj === null || typeof obj !== 'object') return false;
  let proto = obj.__proto__;
  while (proto) {
    if (proto === constructor.prototype) return true;
    proto = proto.__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

注意事项

  • 仅适用于对象类型(非 null 和原始值)。
  • 使用 Object.getPrototypeOf()__proto__ 均可访问原型链。
  • 循环实现更高效,适合深层原型链的场景。

标签: instanceofjs
分享给朋友:

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现定位

js实现定位

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

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…