当前位置:首页 > 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实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(func,…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…