js中的instanceof原理
instanceof
运算符用于检测构造函数的prototype
属性是否存在于某个对象的原型链上。
示例代码:
function C() {}
var o = new C();
console.log(o instanceof C); // true,因为Object.getPrototypeOf(o) === C.prototype
console.log(o instanceof Object); // true,因为C.prototype继承自Object.prototype
实现原理:
function instanceofOperator(instance, constructor) {
// 获取对象的原型
let prototype = Object.getPrototypeOf(instance);
// 循环查找原型链上的constructor.prototype是否在原型链上
while (prototype) {
if (prototype === constructor.prototype) {
return true; // 如果找到,则返回true
}
// 继续向上查找
prototype = Object.getPrototypeOf(prototype);
}
return false; // 如果原型链末端都没找到,则返回false
}
使用上述函数可以模拟instanceof
的行为:
console.log(instanceofOperator(o, C)); // true
console.log(instanceofOperator(o, Object)); // true
评论已关闭