- 前言
instanceof在我们进行类型判断过程中是极其常见的,和typeof配合使用便可以完成js中绝大部分数据类型的判断。但是你有没有想过,instanceof的底层是如何实现的呢? 今天就让我们一起手撕JS源码,实现手写instanceof!
想要实现手写instanceof,就要理解,instanceof的底层核心——沿着原型链向上查找,检查目标对象的原型链中是否有与指定对象的原型相同的原型!
- 手撕代码
function myInstanceof(left, right) { //left为目标对象,right为指定对象
// 基本数据类型直接返回false
if (typeof left !== 'object' || left === null) {
return false;
}
// 非基础数据类型开始实现沿着原型链向上查找
// 获取当前原型链
let proto = Object.getPrototypeOf(left);
// 使用死循环进行原型链爬升
while (true) {
// 原型链的顶部是null,如果走到这,说明不存在相同的原型
if (proto === null) {
return false;
}
// 存在相同的原型,说明是目标对象的实例,返回true
if (proto === right.prototype) {
return true;
}
// 实现原型链爬升
proto = Object.getPrototypeOf(proto);
}
}
// 使用简单数据类型测试
console.log(myInstanceof(111, Number)); // false
// 使用复杂数据类型
console.log(myInstanceof(new Number(111), Number)); // true
- 写在最后
在JS的学习中,我们不应该仅仅学习各种API,更应该深入学习JS的底层,了解其工作原理,将JS进行更加彻底的学习!
我是江河,前端实习生一枚,欢迎各位大佬滴滴,文章如有不正之处敬请斧正!