js实现myinstanceof


实现 myInstanceof 的基本原理
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。手动实现 myInstanceof 需要递归检查对象的原型链。
实现代码
function myInstanceof(obj, constructor) {
if (obj === null || typeof obj !== 'object') {
return false;
}
let proto = Object.getPrototypeOf(obj);
while (proto) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
代码解析
- 首先检查
obj是否为null或非对象类型,如果是则直接返回false。 - 使用
Object.getPrototypeOf获取obj的原型对象。 - 进入循环,不断向上查找原型链,直到找到与
constructor.prototype匹配的原型对象。 - 如果找到匹配的原型对象,返回
true;否则返回false。
使用示例
function Person() {}
const p = new Person();
console.log(myInstanceof(p, Person)); // true
console.log(myInstanceof(p, Object)); // true
console.log(myInstanceof([], Array)); // true
console.log(myInstanceof([], Object)); // true
console.log(myInstanceof(123, Number)); // false
注意事项
- 原始类型(如
number、string、boolean)无法通过instanceof检查,直接返回false。 null和undefined也会直接返回false。- 此实现与原生
instanceof行为一致,但无法处理跨iframe或window的构造函数检查。






