通过循环不断检查对象的原型链,直到找到相同的原型对象或到达原型链的顶端。这个例子也有助于理解[[原型链]]。
left
: 某个实例对象
right
: 某个构造函数
js
function myInstanceof(left, right) {
// 获取右侧构造函数的原型对象
let prototype = right.prototype;
// 获取左侧对象的原型
left = left.__proto__;
// 不断沿着原型链向上查找
while (true) {
// 到达原型链的顶端,仍未找到
if (left === null) return false;
// 找到相同的原型对象
if (left === prototype) return true;
// 继续向上查找
left = left.__proto__;
}
}
// 示例
console.log(myInstanceof([], Array)); // true
console.log(myInstanceof({}, Array)); // false