返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript 手动实现instanceof的方法
  • 213
分享到

JavaScript 手动实现instanceof的方法

2024-04-02 19:04:59 213人浏览 泡泡鱼
摘要

1. instanceof的用法 instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。 function Person() {}

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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript 手动实现instanceof的方法

本文链接: https://lsjlt.com/news/155886.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript 手动实现instanceof的方法
    1. instanceof的用法 instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。 function Person() {} ...
    99+
    2024-04-02
  • JavaScript如何手动实现instanceof
    这篇文章将为大家详细讲解有关JavaScript如何手动实现instanceof,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. instanceof的用法instanceof运算符用于检测构造函数的p...
    99+
    2023-06-25
  • JavaScript之instanceof方法手写示例详解
    目录方法介绍instanceof 是什么?instanceof 使用方式开始手写方法介绍 instanceof 是什么? 用于检测构造函数的 prototype 属性是否出现在某个实...
    99+
    2022-11-13
    JavaScript instanceof 方法 JavaScript instanceof
  • JavaScript实现页面滚动动画的方法
    小编给大家分享一下JavaScript实现页面滚动动画的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!JavaScript可以做什么1.可以使网页具有交互性,...
    99+
    2023-06-14
  • javascript动态分页的实现方法实例
    之前分页都是使用框架给出的分页类来实现分页,当然,体验可能不是那么好。 这次在写YII2.0框架的后台管理系统的小例子的时候,我这也尝试了一下前后分离,用ajax来实现分页跳转。 那...
    99+
    2024-04-02
  • javascript中instanceof运算符的用法详解
    概述 instanceof运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上 语法 obj instanceof Object;//t...
    99+
    2024-04-02
  • 徒手实现关于JavaScript的24+数组方法
    目录一、遍历类1. forEach2. map3. every4. some5. filter6. reduce7. reduceRight二、查找类1. find2. findIn...
    99+
    2024-04-02
  • JavaScript实现动态表格的方法详解
    目录JavaScript实现动态表格基本效果如下代码如下:第一种方式(较简单,建议使用)方式二改进版代码如下:总结JavaScript实现动态表格 (改建版,代码见最下面) 基本效...
    99+
    2024-04-02
  • Android实现手机振动设置的方法
    本文实例讲述了Android实现手机振动设置的方法。分享给大家供大家参考。具体如下: main.xml布局文件: <?xml version="1.0" en...
    99+
    2022-06-06
    方法 手机 Android
  • vue移动端实现手指滑动效果的方法
    本篇内容主要讲解“vue移动端实现手指滑动效果的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue移动端实现手指滑动效果的方法”吧!本文实例为大家分享了vue移动端实现手指滑动效果的具体代...
    99+
    2023-06-20
  • JavaScript中isPrototypeOf、instanceof和hasOwnProperty函数的用法详解
    isPrototypeOf 作用:检测一个对象是否是另一个对象的原型。或者说一个对象是否被包含在另一个对象的原型链中 var p = {x:1};//定义一个原型对象 var o =...
    99+
    2024-04-02
  • javascript居中的实现方法
    这篇文章主要为大家展示了“javascript居中的实现方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript居中的实现方法”这篇文章吧。 ...
    99+
    2024-04-02
  • JavaScript实现累加的方法
    这篇文章主要介绍JavaScript实现累加的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! JavaScript实现累加的方法:1、通过“for(v...
    99+
    2024-04-02
  • javascript实现异步的方法
    这篇文章给大家分享的是有关javascript实现异步的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript实现异步的方法:1、使用setTimeout方法;2、使用setImmediate 方...
    99+
    2023-06-14
  • 实现javascript菜单的方法
    本篇内容介绍了“实现javascript菜单的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!javascript菜单的实现方法:首先将菜...
    99+
    2023-06-14
  • Javascript动手实现call,bind,apply的代码详解
    1.检查当前调用的是否为函数 2.如果当前没有传入指向的this,则赋值为window 3.将fn指向当前调用的函数 4.获取传入的参数 5.将参数传入fn进行调用 6.将对象上的f...
    99+
    2024-04-02
  • Javascript如何实现动态样式控制方法
    这篇文章主要介绍Javascript如何实现动态样式控制方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!方法一:使用style属性来设置使用style属性来设置html代码:   &n...
    99+
    2023-06-29
  • 关于JavaScript实现动画时动画抖动的原因与解决方法
    目录使用定时器实现动画出现卡顿的原因requestAnimationFrame 的前世今生requestAnimationFrame VS setInterval参考资料总结前段时间...
    99+
    2024-04-02
  • javascript多线程的实现方法
    本篇内容介绍了“javascript多线程的实现方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • JavaScript实现哈希表的方法
    本篇内容主要讲解“JavaScript实现哈希表的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript实现哈希表的方法”吧!哈希表通常是基于数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作