js实现instanceof

实现 instanceof 的原理
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。手动实现需要遍历对象的原型链,与构造函数的 prototype 属性进行比较。

手动实现代码
function myInstanceof(obj, constructor) {
// 获取对象的原型
let proto = Object.getPrototypeOf(obj);
// 获取构造函数的原型
const prototype = constructor.prototype;
// 遍历原型链
while (proto !== null) {
if (proto === 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({}, Array)); // false
实现要点
检查参数有效性,确保 constructor 是一个函数 使用 Object.getPrototypeOf 获取对象原型 通过循环不断向上查找原型链 比较当前原型与构造函数 prototype 属性是否相同
边界情况处理
原始值类型直接返回 false null 和 undefined 作为左值会抛出错误 右值不是构造函数会抛出错误






