第10期 instanceof实现原理

306 阅读1分钟

A instanceof B的作用就是判断A是否在B的原型链上,所以instanceof 原理就是一层一层查找 proto,如果和 constructor.prototype 相等则返回 true,如果一直没有查找成功则返回 false。

function B() {}
function C() {}

function instance(A, B) {
    // 获取A的原型
    A = A.__proto__;
    // 获取B的原型
    B = B.prototype;
    let isStop = false;
    while (!isStop) {
        //  当到达A的原型链的顶端,即null的时候都没有找到,则A不在B的原型链,返回falseif (A == null) {
            isStop = true;
            return false;
        }
        // A的原型链上的某个原型等于B 即A在B的原型链上,返回trueif (A === B) {
            isStop = true;
            return true;
        }
        // 继续在A的原型链上查找
        A = A.__prop__;
    }
}

let a = {};
let b = new B();
let c = new C();

console.log(instance(a, B)); // false
console.log(instance(b, B)); // true
console.log(instance(c, B)); // false