当前位置:首页 > JavaScript

js实现myinstanceof

2026-04-05 15:21:54JavaScript

js实现myinstanceof

js实现myinstanceof

实现 myInstanceof 的基本原理

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。手动实现 myInstanceof 需要递归检查对象的原型链。

实现代码

function myInstanceof(obj, constructor) {
  if (obj === null || typeof obj !== 'object') {
    return false;
  }

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

代码解析

  • 首先检查 obj 是否为 null 或非对象类型,如果是则直接返回 false
  • 使用 Object.getPrototypeOf 获取 obj 的原型对象。
  • 进入循环,不断向上查找原型链,直到找到与 constructor.prototype 匹配的原型对象。
  • 如果找到匹配的原型对象,返回 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([], Object)); // true
console.log(myInstanceof(123, Number)); // false

注意事项

  • 原始类型(如 numberstringboolean)无法通过 instanceof 检查,直接返回 false
  • nullundefined 也会直接返回 false
  • 此实现与原生 instanceof 行为一致,但无法处理跨 iframewindow 的构造函数检查。

标签: jsmyinstanceof
分享给朋友:

相关文章

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现变形

js实现变形

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

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…