js实现intanceof
实现 instanceof 的原理
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。手动实现需要遍历对象的原型链,并与构造函数的 prototype 进行比较。
基本实现代码
function myInstanceof(obj, constructor) {
let proto = Object.getPrototypeOf(obj)
const prototype = constructor.prototype
while (true) {
if (proto === null) return false
if (proto === prototype) return true
proto = Object.getPrototypeOf(proto)
}
}
实现要点
使用 Object.getPrototypeOf() 获取对象的原型 通过 while 循环不断向上查找原型链 当找到匹配的原型时返回 true 当原型链顶端为 null 时返回 false

边界情况处理
// 处理基本数据类型
function myInstanceof(obj, constructor) {
if (obj === null || typeof obj !== 'object') {
return false
}
let proto = Object.getPrototypeOf(obj)
const prototype = constructor.prototype
while (true) {
if (proto === null) return false
if (proto === prototype) return true
proto = Object.getPrototypeOf(proto)
}
}
使用示例
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
与原生 instanceof 的区别
原生 instanceof 会检查对象的 Symbol.hasInstance 方法 原生 instanceof 对基本数据类型有特殊处理 此实现更关注原型链的核心机制






