instanceof操作符的实现原理

本文解析了JavaScript中instanceof操作符的工作原理,通过实例说明了如何判断一个对象是否属于某个构造函数的原型链。并提供了一个自定义实现instanceof的方法。

首先要知道instanceof是用来判断构造函数的prototype属性是否出现在原型链上的任何位置。(沿着原型链向上查找)
也就是说A instanceof B判断B的prototype属性指向的原型对象(B.prototype)是否在对象A的原型链上。
如果A的原型链经过B的原型对象(B.prototype),那么A instanceof B就会判断为true。

所以构造函数的prototype属性指向它的原型对象,构造函数的实例的_proto_属性也指向该原型对象。而且每个对象都有_proto_属性,只有Object.prototype.__proto__ === null
例如我们创建一个Person的实例p1,p1=new Person(),判断p1 instanceof Personp1 instanceof Object是否为true。

判断p1 instanceof Object
从上图就可以知道Person的原型对象出现在p1的原型链上,Object的原型对象也出现在p1的原型链上。
所以我们用代码就可以实现instanceof:

function myInstanceof(left,right){
	//获取构造函数的原型对象
	let prototype=right.prototype;
	//获取对象的原型,也可以使用Object.getPrototypeOf(left)得到该对象的原型
	let leftProto=left.__proto__;
	while(true){
		//查找到最顶端也没有就返回false
		if(leftProto===null) return false;
		if(leftProto===prototype)return true;
		//沿着原型链向上查找
		leftProto=leftProto.__proto__;
	}
}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值