003-instanceof原理

实现一个instanceof

上篇文章002-判断JS数据类型写到,instanceof可以判断引用类型,那么他是怎么判断的呢,现在我们来实现一个自己的instanceof

function myInstanceof(leftData, rightData) {
	let rightDataProto = rightData.prototype;  // 找到右边值的prototype
	if(leftData === null) {
		return false;  // 直接返回false,防止第一个参数为null时报错
	}
	leftData = leftData.__proto__;  // 找到左边值的__proto__
	while(true) {
		if(leftData === rightDataProto) {  // 关联prototype和__proto__
			return true;
		}
		leftData = leftData.__proto__  // 顺着原型链继续往上找
	}
}

// 测试一下
function Person() {}
var person = new Person();
console.log(myInstanceof(person, Person))  // true
console.log(myInstanceof(person, Object))  // true
console.log(myInstanceof([], Array));  // true
console.log(myInstanceof(function() {}, Function));  // true
console.log(myInstanceof({}, Object));  // true

到目前为止,我们已经搞清楚instanceof是怎么生效的了,但是我们还有疑惑,为什么leftData === rightDataProto就是true了呢?为什么myInstanceof(person, Person)myInstanceof(person, Object)都是true呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值