实现instanceof js
实现 instanceof 操作符
JavaScript 中的 instanceof 操作符用于检测一个对象是否是某个构造函数的实例。以下是手动实现 instanceof 功能的几种方法。
方法一:原型链遍历
通过递归遍历对象的原型链,检查是否与目标构造函数的 prototype 属性匹配。
function myInstanceof(obj, constructor) {
let proto = Object.getPrototypeOf(obj);
while (proto) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}
方法二:直接使用原型链
利用 Object.prototype.isPrototypeOf 方法,检查目标构造函数的 prototype 是否在对象的原型链上。
function myInstanceof(obj, constructor) {
return constructor.prototype.isPrototypeOf(obj);
}
方法三:结合 constructor 属性
通过检查对象的 constructor 属性是否指向目标构造函数。
function myInstanceof(obj, constructor) {
return obj && obj.constructor === constructor;
}
注意事项
- 原始类型(如
number、string、boolean)无法通过instanceof检测,因为它们不是对象。 - 如果目标构造函数的
prototype被修改,instanceof的结果可能会变化。 - 跨框架或窗口的对象检测可能失效,因为不同全局环境中的构造函数不共享原型。
示例测试
function Person() {}
const p = new Person();
console.log(myInstanceof(p, Person)); // true
console.log(myInstanceof([], Array)); // true
console.log(myInstanceof({}, Object)); // true
以上方法均能模拟 instanceof 的核心功能,根据具体需求选择合适的方法。







