js实现instanceof+实现原理

instanceof是干什么的?

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

只要遍历实例对象的原型,看看是否跟构造函数的prototype相等,即可实现。

function instance_of (obj, Fn) {
    // 判断传入的构造函数是不是函数类型
    if (typeof Fn !== 'function') {
        throw new TypeError('不是函数');
    }

    // 实例不是对象, 返回false
    if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {
        return false;
    }

    // 取 Fn的prototype原型比较
    let proto = Fn.prototype;

    while(obj.__proto__) {
        // 当实例的隐式原型__proto__ 全等于 Fn的显式原型 prototype,返回true
        if (obj.__proto__ === proto) return true;

        // 否则,继续向原型链上游移动
        obj = obj.__proto__;
    }

    return false;
}

猜你喜欢

转载自blog.csdn.net/RedaTao/article/details/107799080