instanceof原理:通过判断对象的原型是否等于构造函数的原型来进行类型判断。
通过检查对象的原型链来确定对象是否属于某个类或构造函数。核心原理是基于原型链的查找。
当我们使用 obj instanceof Constructor 进行判断时,JavaScript 引擎会从 obj 的原型链上查找 Constructor.prototype 是否存在。
- 如果存在,则返回 true,否则继续在原型链上查找。
- 如果查找到原型链的顶端仍然没有找到,返回 false。
代码:
/*
* @param {Object} obj 需要判断的数据
* @param {Object} constructor
* @return {Boolean}
*/
function myInstanceof(obj,constructor){
if(obj === null || typeof obj !== 'object'){
return false;
}
let proto = Object.getPrototypeOf(obj);//获取原型
while(proto !== null){
if(proto === constructor.prototype){//检查对象的原型是否与目标构造函数的原型相等
return true;
}
proto = Object.getPrototypeOf(proto);//沿着原型链查找
}
return false
}
//测试代码
let arr = [];
let obj = {};
let a = 1;
console.log(myInstanceof(arr,Array));
console.log(myInstanceof(obj,Object));
console.log(myInstanceof(a,Number));
运行结果: