js实现myinstanceof
实现原理
instanceof运算符用于检测构造函数的prototype属性是否出现在实例对象的原型链上。手动实现需要遍历对象的原型链并与目标函数的prototype进行比较。
代码实现
function myInstanceof(obj, constructor) {
// 基础类型直接返回false
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;
}
使用示例
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(123, Number)); // false
关键点说明
使用Object.getPrototypeOf()获取对象的原型
通过while循环不断向上查找原型链
当找到与构造函数prototype相等的原型时返回true
原型链查找到null时终止并返回false

边界情况处理
原始类型(非对象)直接返回false
null和undefined会被正确处理
继承关系也能正确识别






