当前位置:首页 > JavaScript

js实现intanceof

2026-02-01 20:27:11JavaScript

js实现instanceof

在JavaScript中,instanceof运算符用于检测构造函数的prototype属性是否出现在对象的原型链上。以下是手动实现instanceof功能的代码示例:

js实现intanceof

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

实现原理

  1. 获取对象的原型链:使用Object.getPrototypeOf(obj)获取对象的原型。
  2. 遍历原型链:通过循环不断向上查找原型链。
  3. 比较原型:检查当前原型是否等于构造函数的prototype属性。
  4. 返回结果:如果找到匹配的原型则返回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({}, Array)); // false

注意事项

  1. 原始类型检测:instanceof对原始类型(如numberstringboolean)无效,手动实现也需注意这一点。
  2. 跨框架对象:不同iframe或window环境下的对象可能无法正确检测。
  3. Symbol.hasInstance:ES6允许构造函数自定义instanceof行为,手动实现未考虑此特性。

该实现模拟了原生instanceof的核心功能,适用于大多数常规场景。

标签: jsintanceof
分享给朋友:

相关文章

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现视口

js实现视口

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

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…