instanceof 原理和简单实现

instanceof原理 一、instanceof原理: 作用: ①用于判断某个实例是否属于某构造函数 ②在继承关系中用来判断一个实例是否属于它的父类型或者祖先类型的实例 查找构造函数的原型对象是否在实例对象的原型链上,如果在返回true,如果不在返回false。 说白了,只要右边变量的 prototype 在左边变量的原型链上即可。因此,instanceof 在查找的过程中会遍历左边变量的原型链,直到找到右边变量的 prototype,如果查找失败,则会返回 false。 var obj = new Object() obj 阅读详情
1. 是什么

在 MDN 上是这样描述 instanceof 的:

The instanceof operator tests whether the prototype property of a constructor appears anywhere in the prototype chain of an object.

instanceof 运算符用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置

2. 实现

这里已经描述的很清楚了, 怎么实现呢
思路:

  • 首先 instanceof 左侧必须是对象, 才能找到它的原型链
  • instanceof 右侧必须是函数, 函数才会prototype属性
  • 迭代 , 左侧对象的原型不等于右侧的 prototype时, 沿着原型链重新赋值左侧

代码:

const instance_of = (left, right) => {
	// 基本的数据类型为false
	const baseType = ['number', 'string', 'boolean', 'undefined', 'symbol']
	if(baseType.includes(typeof left)) return false
	// 右侧函数的原型
	const RP = right.prototype
	while(true) {
		// 出口, left.__proto__.__proto__....的尽头是null, 
		// 并且 null instanceof 任何类型 都不成立, 即使是Object, 下面会说到
		if(left === null) {
			return false
		} else if(left === RP) {
			return true
		}
		// 找不到 ? 把left的值改为它的原型
		left = left.__proto__
	}
}
3. 需要注意的一些情况

以下状况均为 false

/** 
* 因为 'abc' 是字符串, 是基本数据类型 
* 有人说 'abc'.__proto__ === String.prototype 明明是成立的呀
* 这是因为, 当一个字符串调用方法或者属性的时候( 如'abc'.__proto__ ),会发生一个装箱操作,转换为包装类型
* 隐式转换为 new String('abc')
* 但是 'abc' instanceof String 并不存在装箱操作
*/
'abc' instanceof String  // false

// null不具有任何对象的特性, null也没有__proto__属性
null instanceof Object  // false

// String.__proto__.constructor.name === 'Function'
String instanceof String // false
Number instanceof Number  // false
//....
//....
从C-EPS到DP-EPS:手把手图解不同EPS类型怎么选,对你的车操控感影响有多大? 方向盘转动时那股细腻的阻尼感,高速过弯时令人安心的沉稳,或是狭窄车位里一根手指就能拨动的轻盈——这些看似微妙的差异,其实都源自转向系统电机那几厘米的安装位置变化。当我们谈论驾驶乐趣时,发动机参数和悬架调校总是占据C位,但真正连接驾驶者与车辆的神经末梢,恰恰是那套默默工作的电动助力转向系统(EPS)。不同EPS类型带来的操控特性差异,可能比马力数字更能定义一辆车的性格。 阅读详情

相关推荐

[学习笔记]Esp32 + 4G模块,随身wifi,ppp拨号上网

Esp32S3 + 4G模块制作随身WIFI教程

weixin_45595548的博客 7417

instanceOf原理及手动实现

结合原型的继承原理,详解JavaScript中instanceOf操作符原理。

林木木的博客 1155

基-2 16点fft的verilog实现

本文是采用输入8位数据,输出8位数据的16点fft实现,旋转因子采用8位rom存储,分为cos和sin2个rom存储;输入数据以及每一级的输出数据采用8位的ram进行存储,分为实部和虚部进行存储。采用顺序输入,那么输出则为倒序。生成rom,可先在matlab中,计算出cos和sin的值,然后写入coe文件,再由ip核生成,具体过程自行百度,懒得百度的话,可以发我的邮箱来获得具体的程序。因为本文采用...

juniorofMFC的博客 9992

instanceof 运算符的作用和核心原理、 手写实现 instanceof

【代码】instanceof 的核心原理、 手写实现 instanceof。

小草莓的博客 848

最新版IAR9.40和注册工具

IAR最新版的IDE在编译速度和代码提示等各个方面上都有很大提升,软件这个东西果然还是越新越好。之前的时候,IAR v9系列网上很多人都说能用,但是又没有把 IAR v9系列的注册方法写的很清楚,导致我一直都用注册老版本v8的方法去注册v9。结果注册后都会提示。

xue_nuo的博客 4万+

计算pi小数点后10000位

数据结构课上,老师让我们计算一下pi的10000位,复习一下面向对象。 First Try:定义一个高精度类hp(high precision),实现加减乘除,输入输出,然后随便找一个公式,比如Wallis公式,全都用hp进行计算。 现实是:大数乘大数或者大数除大数,实在是太慢了。而且Wallis公式收敛太慢。 Second Try先找到一个收敛较快的公司:BBP公式,观察公式发现,...

我的技术人生 7395

instanceof实现原理以及作用

instanceof,typeof,原型,原型链

weixin_47948509的博客 1100

【笔记软件obsidian】从入门到精通

目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、

patrick的博客 9万+

instanceof的实现原理浅析及手写instanceof的实现

instanceof的实现原理和手写instanceof的实现。

您的博客 3790

用Multisim和AD2复刻经典:手把手教你搭建μA741三角波-方波发生器(附完整避坑指南)

本文详细介绍了如何使用Multisim和AD2搭建基于μA741运算放大器的三角波-方波发生器,包括电路原理、Multisim仿真流程、AD2硬件搭建及调试技巧。通过对比理论计算、仿真和实测数据,深入分析器件非理想特性的影响,并提供16个典型问题的解决方案,帮助读者掌握波形发生器的设计原理和工程调试经验。

weixin_28744423的博客 284

将3DMax编辑的动画,导入给已经绑定蒙皮好的模型给Unity使用

现在程序猿想做独立游戏,即容易,也难。 说容易,引擎越来越傻瓜化。 说难,到哪去找靠谱的美术? 好在伟大的AssetStore(还有淘宝上)有大批不赖的资源可以用。 现成的模型,是好,但是,没有配套的动作,却是一件让人头疼的事情,即使用IK动画,也不能完美的弥补这一缺陷。 虽然Unity具备 retargeting 功能,但是,也不是万能的,很多情况下,非标准的骨骼会导致

正经的时候都在打游戏 1万+

instanceof 函数的实现原理

instanceof 函数的实现原理

Sherry Tian的博客 591

手把手教你学SIMULINK模块库文件专栏-From Workspace 模块详解

模块是 Simulink 中的一个信号源模块,用于从 MATLAB 工作区加载数据作为输入信号。该模块允许用户将预先在 MATLAB 中生成的数据(如时间序列、矩阵或结构体)导入到 Simulink 模型中,从而实现更灵活的信号输入和仿真控制。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常灵活的工具,适用于需要从 MATLAB 工作区加载数据的各种场景。

MHD0815的博客 633

js instanceof用法_实现 instanceof 并说明其工作原理

2020年3月13日 《每日一题系列 》 作者:王二狗 原文链接:实现 instanceof 并说明其工作原理 博客:掘金、思否、知乎、简书、优快云 点赞再看,养成习惯,每日一题系列会一直更新下去,你们的支持是我持续分享的最大动力 实现 instanceof//Obj 被检测对象 Constructor 构造函数 function instance_of(Obj, Con...

weixin_34518190的博客 384

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JavaScript内置一些方法的实现原理--Object.freeze()、instanceof

const定义的常量,一般是不能修改的。 比如: 1 const TIME_OUT = 10000; 但是当值为引用类型值时,还是可以操作对象,扩展或修改对象属性、方法等等。 以下演示代码的操作是不会报错,且行之有效的。。 1 const person = { 2 name: 'xm' 3 } 4 person.age = 18; 5 person.name = ...

weixin_30721899的博客 438

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JS篇 - 实现new、call、apply、bind、深拷贝、EventHub、promise、reduce、instanceof

手写bind 用法:把新的this绑定到某个函数func上,并返回func的一个拷贝。 使用:let boundFunc = func,bind( thisArg [, arg1 [, arg2 [, ...argN]]] ) 实现: 1.初级: 优点:只使用ES6新语法,代码简洁; 缺点:不兼容IE等古老者 function bind_1(asThis , ...args) { const fn = this; //这里的this 就是调用bind的函数 func return function(..

qq_42828458的博客 288

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【一天时间|JavaScript基础】原型和原型链

本期介绍原型、原型链和 class。包括 class ,继承,原型,原型链,instanceof。原型是 “JS 三座大山” 之一,原型和原型链也是必考知识点。

江拥羡橙的博客 2万+

js--浅谈instanceof的底层实现原理、手动实现一个instanceof

转自https://blog.youkuaiyun.com/qq_38722097/article/details/80717240 www.cnblogs.com/yalong/p/10… typeof 实现原理 typeof一般被用于判断一个变量的类型,我们可以利用typeof来判断number、string、object、boolean、function、undefined、symbol这七种类型。当判...

weixin_34290352的博客 1816

typeof和instanceof原理

typeof运算符返回一个字符串,表示操作数的类型。js 在底层存储变量的时候,会在变量的机器码的低位1-3位存储其类型信息。而 typeof 关键字检测数据类型的原理就是通过检测这1-3位机器码实现检测不同数据类型。其次:typeof 在检测出其为引用数据类型后,还会再检测这个引用数据类型是否有实现[[call]]方法。不是,则返回object ,是,则返回function。

weixin_43425300的博客 1998

instanceof用法_instanceof 和 typeof 的实现原理

typeof 实现原理typeof 一般被用于判断一个变量的类型,我们可以利用 typeof 来判断number, string, object, boolean, function, undefined, symbol 这七种类型,这种判断能帮助我们搞定一些问题,比如在判断不是 object 类型的数据的时候,typeof能比较清楚的告诉我们具体是哪一类的类型。但是,很遗憾的一点是,typeof...

weixin_39861624的博客 208

深入理解instanceof实现原理

许久没有写博客啦,最近有时间,将近来学到的一些有价值的东西整理下来└(^_^)┘ 废话不多说,开冲! 文章目录由类型判断引出 `instanceof``instanceof` 判断继承`instanceof` 实现原理`instanceof` 易错问题 由类型判断引出 instanceof 在 JavaScript 中,有7种基本类型(包括6种原始类型以及对象类型)。 在某些场景下,可能会需...

wyhstars的博客 6513

java中instanceof的实现原理

(secondary super):所有其它超类型(接口、数组相关以及超过深度7的超类),存于一个数组(在初始化数组时分情况按顺序填好)。(T) obj 不引发ClassCastException,返回true,否则为false;(primary super):类继承深度从0到7的超类,存于长度为8的缓存数组。类所继承的超类和所实现的接口不会在运行时改变。可以将这些信息存储起来。在字节码使用特殊指令对常量池中的相关符号引用进行判断。总结:obj==null,返回false;不用遍历继承链等(性能差)

A_BCDEF_的博客 5027

instanceof的实现原理

instanceof用于判断引用数据类型,并且只能用于判断引用类型,判断基本数据类型会判断出错。

laj1111的博客 397

instanceof和typeof实现原理

instanceof 和 typeof 的实现原理 typeof实现原理 typeof一般用来判断一个变量的类型,如:number,string,object,boolean,function,undefined,symbol,bigint等类型,需要注意的是:typeof在判断非引用类型时可以清除的分辩出数据的类型,但判断引用类型时就只会返回 'object’ var a = 'test' typeof a // => "string" var b = 321 typeof b // =>

零度flying 346

instanceof 实现原理

instanceof 实现原理 刷面试题的时候,很多资料都会用题目+答案的情况展示给我们,比如: //问:下面程序有什么问题吗?运行结果是什么? "" instanceof Object; //1.true new String () instanceof String //2.true ‘c’ instanceof Character //3.false 并且在下面给我们解释如下:...

田乐乐 680

深挖js中instanceof 和 typeof 的实现原理

文章目录ES内置数据类型typeof用法注意点原理一些例子自己实现一个?instanceof用法是否在原型链上继承中判断实例是否属于它的父类或属于它的祖先类原理自己实现一个?总结参考资料 ES内置数据类型 在es6标准中的JS 中,有七种内置类型 七种内置类型又分为两大类型:基本类型和对象(Object)。 基本类型有六种: null,undefined,boolean,number,string,symbol。 一些值得注意的坑 JS 的数字类型是浮点类型的,没有整型。并且浮点类

SCUhzs 1529
上一篇: 对CommonJS,AMD,CMD规范以及script标签异步加载的理解
下一篇: javascript 一些循环方法
飞驰的地铁
博客等级 码龄11年 13粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值