当前位置:首页 > JavaScript

js实现myinstanceof

2026-01-31 23:03:40JavaScript

js实现myinstanceof

js实现myinstanceof

实现 myInstanceOf 方法

在 JavaScript 中,instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。以下是手动实现 myInstanceOf 的方法:

function myInstanceOf(obj, constructor) {
    if (typeof constructor !== 'function') {
        throw new TypeError('Right-hand side of instanceof is not callable');
    }
    if (obj === null || typeof obj !== 'object') {
        return false;
    }

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

代码解析

  • 检查 constructor 是否为函数,如果不是则抛出类型错误。
  • 检查 obj 是否为对象或不为 null,如果不是则直接返回 false
  • 获取 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

注意事项

  • 该方法模拟了原生 instanceof 的行为,但原生 instanceof 对基本类型(如 NumberString)的处理略有不同。
  • 如果传入的 obj 是基本类型(非对象),直接返回 false,与原生 instanceof 行为一致。

标签: jsmyinstanceof
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…