Skip to content

通过循环不断检查对象的原型链,直到找到相同的原型对象或到达原型链的顶端。这个例子也有助于理解[[原型链]]。

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