我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript 手动实现instanceof的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript 手动实现instanceof的方法

1. instanceof的用法

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


function Person() {}
function Person2() {}

const usr = new Person();

console.log(usr instanceof Person); // true
console.log(usr instanceof Object); // true

console.log(usr instanceof Person2); // false

如上代码,定义了两个构造函数,PersonPerson2,又实用new操作创建了一个Person的实例对象usr

实用instanceof操作符,分别检验构造函数prototype属性是否在usr这个实例的原型链上。

当然,结果显示,PersonObjectprototype属性在usr的原型链上。usr不是Person2的实例,故Person2prototype属性不在usr的原型链上。

2. 实现instanceof

明白了instanceof的功能和原理后,可以自己实现一个instanceof同样功能的函数:


function myInstanceof(obj, constructor) {
    // obj的隐式原型
    let implicitPrototype = obj?.__proto__;
    // 构造函数的原型
    const displayPrototype = constructor.prototype;
    // 遍历原型链
    while (implicitPrototype) {
        // 找到,返回true
        if (implicitPrototype === displayPrototype) return true;
        implicitPrototype = implicitPrototype.__proto__;
    }
    // 遍历结束还没找到,返回false
    return false;
}

myInstanceof函数接收两个参数:实例对象obj和构造函数constructor

首先拿到实例对象的隐式原型:obj.__proto__,构造函数的原型对象constructor.prototype

接着,就可以通过不断得到上一级的隐式原型


implicitPrototype = implicitPrototype.__proto__;

来遍历原型链,寻找displayPrototype是否在原型链上,若找到,返回true

implicitPrototypenull时,结束寻找,没有找到,返回false

原型链其实就是一个类似链表的数据结构。

instanceof做的事,就是在链表上寻找有没有目标节点。从表头节点开始,不断向后遍历,若找到目标节点,返回true。遍历结束还没找到,返回false

3. 验证

写一个简单的实例验证一下自己实现的instanceof


function Person() {}
function Person2() {}

const usr = new Person();

function myInstanceof(obj, constructor) {
    let implicitPrototype = obj?.__proto__;
    const displayPrototype = constructor.prototype;
    while (implicitPrototype) {
        if (implicitPrototype === displayPrototype) return true;
        implicitPrototype = implicitPrototype.__proto__;
    }
    return false;
}

myInstanceof(usr, Person); // true
myInstanceof(usr, Object); // true

myInstanceof(usr, Person2); // false
myInstanceof(usr, Function); // false

myInstanceof(usr.__proto__, Person); // false
usr.__proto__ instanceof Person; // false

可以看到,myInstanceof正确得出了结果。

有趣的是,usr.__proto__ instanceof Person返回false,说明obj instanceof constructor检测的原型链,不包括obj节点本身。

JavaScript常见手写代码:

「GitHub—code-js」

到此这篇关于JavaScript 手动实现instanceof的文章就介绍到这了,更多相关JavaScript instanceof内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript 手动实现instanceof的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript如何手动实现instanceof

这篇文章将为大家详细讲解有关JavaScript如何手动实现instanceof,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. instanceof的用法instanceof运算符用于检测构造函数的p
2023-06-25

JavaScript之instanceof方法手写示例详解

这篇文章主要为大家介绍了JavaScript之instanceof方法手写示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

JavaScript中手动实现Array.prototype.map方法

本文详细讲解了如何手动实现JavaScript中的Array.prototype.map方法,该方法遍历数组中的元素,并调用一个回调函数对每个元素进行操作。要手动实现此方法,需要创建新数组,遍历原始数组,执行回调函数,并存储结果到新数组中。本文提供了手动实现的完整代码实例,并展示了如何使用它来映射数组中的数字并将其乘以2。虽然手动实现可能没有内置方法那么高效,但对于小型数组或简单的映射操作,它可以是一个可行的替代方案。
JavaScript中手动实现Array.prototype.map方法
2024-04-02

JavaScript实现页面滚动动画的方法

小编给大家分享一下JavaScript实现页面滚动动画的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript可以做什么1.可以使网页具有交互性,
2023-06-14

Android实现手机振动设置的方法

本文实例讲述了Android实现手机振动设置的方法。分享给大家供大家参考。具体如下: main.xml布局文件:
2022-06-06

vue移动端实现手指滑动效果的方法

本篇内容主要讲解“vue移动端实现手指滑动效果的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue移动端实现手指滑动效果的方法”吧!本文实例为大家分享了vue移动端实现手指滑动效果的具体代
2023-06-20

实现javascript菜单的方法

本篇内容介绍了“实现javascript菜单的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javascript菜单的实现方法:首先将菜
2023-06-14

javascript实现异步的方法

这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate 方
2023-06-14

Javascript如何实现动态样式控制方法

这篇文章主要介绍Javascript如何实现动态样式控制方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方法一:使用style属性来设置使用style属性来设置html代码:
2023-06-29

JavaScript中实现换行的方法

小编给大家分享一下JavaScript中实现换行的方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!js中换行的方法:1、使用【\n】换行符,代码为【alert("第一行\n第二行")】;2、使用【\r】换行符,代码为【a
2023-06-13

编程热搜

目录