问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript中的intanceof如何实现

发布网友 发布时间:2024-10-21 09:17

我来回答

1个回答

热心网友 时间:2024-12-02 20:03

在前端开发的学习中,prototype,是我们一直要去攻克的难题。

前端所有的对象构造,伪class,new都是通过prototype进行操作实现的。

平时我们项目开发中,对于prototype其实应用并不多,因为我们大部分都是用到util包来处理的。

特别是intanceof可以用来比较复杂数据类型。

举例说明下:

我们来举例说明说明下intanceof?

/aa/g?instanceof?Object???true/aa/g?instanceof?RegExp??true

一切对象的baseObject为Object,看似比较拗口,也就是RegExp的prototype指向的就是Object。

let?a1?=?Object.getPrototypeOf(/aa/g)

getProtypeOf是Object对象自带的API,能够拿到参数的原型对象

let?a1?=?Object.getPrototypeOf(/aa/g)??a1?===?RegExp.prototype

这里的a1就是指向复杂对象RegExp的原型,也就是就是instance比较为true

但是

a1?===?Object.prototype???还是false

这个时候我们还需要沿着链继续往上寻找

代码为

let?a2?=?Object.getPrototypeOf(a1)??a2?===?Object.prototype?这个时候就为true

但是如何写一个比较通过的数数据比较呢??

function?myInstanceof(left,?right)?{??//?这里先用typeof来判断基础数据类型,如果是,直接返回false??if(typeof?left?!==?'object'?||?left?===?null)?return?false;??let?proto?=?Object.getPrototypeOf(left);??while(true)?{?//循环往下寻找,直到找到相同的原型对象????if(proto?===?null)?return?false;????if(proto?===?right.prototype)?return?true;//找到相同原型对象,返回true????proto?=?Object.getPrototypeof(proto);??}}//?验证一下自己实现的myInstanceof是否OKconsole.log(myInstanceof(new?Number(123),?Number));//?true

这里面有几个知识点,其实主要就是要了解原型的查找,以及如何获取原型。

接下来我们说下prototype在链上的对应关系。prototype、getPrototypeOf和__proto__直接的对应关系。

例如我们大致举例说明下

function?fnA?(a,b){this.dang?=?a;this.xia?=?b}let?a?=?new?fnA('wan'?,?'ali')fnA.prototype.toString?=?function()?{??return?'[aaaa?'?+?this.dang?+?']';}console.log(Object.getPrototypeOf(a));?//?fnA?{toString:??,?constructor:??}console.log(a.__proto__);?//?fnA??{toString:??,?constructor:??}console.log(fnA.prototype);?//?fnA?{toString:??,?constructor:??}

这几个是获取方式,他们之间又是如何关联的呢??

有时间我好好再来说道一番。

PS:学习前端一定要一步步的来,要有锲而不舍的精神,把所有的东西一步步学扎实。基础知识枯燥乏味,但是对于你对前端的深刻理解有着非常的重要。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
吃干燥剂会有什么反应 干燥剂不慎食用怎么办 于冕被流放多少时间才回来 石羊场客运站坐几路公汽到成都市龙潭社区保平村九组? 从成都石羊场到龙潭寺北湖客运站做地铁公交咋个赶车呀?老师们_百度知 ... 成都理工大学坐车到石羊场客运站怎么走?大概要多久啊?谢谢!! 请问一下成都理工大学到石羊车站怎么做车啊? 还在盲目护理毛孔吗?如何正确护理毛孔? 毛孔粗大该如何处理? 脸t区毛孔粗大怎么办 毛孔粗大的原因是什么 ...Like Intelligent”的英文缩写,它在中文里是什么意思? ...出错,要被炒鱿鱼了,粗心马虎做事慢,还内向,我该怎么办? ...做的是错事,可我还是那么做了,我这是在饮鸩止渴.我该怎么办... iPhone7比三星s8更流畅吗?拍照哪个更自然,没有美颜功能的更好,更自然... ...做那些不该做的事,我该怎么办啊恨死自己自控力怎么差, 三星S8和iphone7的摄像头哪个更流弊 极目寻亲11岁女童在自家楼道失踪,父母为等孩子12年不搬离伤心地 ...因孩子父亲在外地工作,结婚11年聚少离多,孩子从出生一直都是我带... day4 -js的函数认识 ...屏幕有的地方触屏不灵。然后乱跳,有什么办法弄嘛? ...屏幕能显示,刚好一半不能触屏一半能触屏,是什么原因,怎么修_百度... 【Datasheet】STM32F103C8T6中文资料PDF与引脚图及封装 电脑一开机就出现“OX77FCC823”指令引用的“OX0000348D”内存不能... ...桌面如何让文件名能够显示全 现在看着都是省略号 已经将文件名放在右... QQ中转站的文件名后面一段怎么变成省略号 面上的文件,显示全部文件名,怎样修改才能出现省略号显示部分文件名,且... 我有一枚乾隆通宝,请问值钱吗 我有一枚乾隆通宝值钱吗? 红月游戏生化装备分为5种阶段 手机的软件打开时显示停止运行怎么办以前能打开的 aliien是什么意思? ...有专攻和己所不欲,勿施于人分别是什么意思? 显卡是什么东东啊 js中 这种写法是什么意思? hScrollbar: !1 和 t.call(this, !1) ...怎么做?老是做错。脑子发晕请问我该怎么办? 我妈妈47了经常头里面痛,有时发晕,昨晚一下就感觉要死心说不出话,身上... PHP高手请进,总是提示Notice: Undefined index: action in D:\WWW... 一道公司网管的面试题,高手请进... php高手请进:关于站中站 二级域名绑定的问题,用户注册时,根据用户名... 高手请进,php.ini已经去掉了extension=php_gd2.dll前面的分号,为什么... 高手LR请进。(关于命中问题) 有谁在沈阳的KFC店工作过 小妹大专毕业 找不到工作 想去KFC当个服务员 哪位先人能给俺指教指教... 我要去肯德基面试,应该如何字我介绍呢? 著名工艺美术家汪天亮与他的艺术之路 无锡肯德基兼职要做满一年吗?有没有不要坐满一年的餐饮类的兼职? 肯德基餐厅服务员工资一般多少? 肯德基普通员工的工资平均是多少? 轻度抑郁的表现是什么 合肥军海治轻度抑郁如何? 什么是郁郁症?合肥军海医院治郁郁症好吗