当前位置:首页 > JavaScript

js实现myinstanceof

2026-01-31 23:03:40JavaScript

实现 myInstanceOf 方法

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

js实现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实现拷贝

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

js实现点击显示和隐藏

js实现点击显示和隐藏

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

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现选题

js实现选题

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

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…