手写 instanceof

instanceof 检查目标对象的原型链中是否有与指定对象的原型相同的原型, 通过 === 严格等于来对于两个原型是否相等。

function myInstanceof(target, source) {
    let proto = target.__proto__;
    let prototype = source.prototype;
    let queue = [proto];
    // 循环 obj 原型链进行获取 __proto__ 与 prototype 对比
    while(queue.length) {
        let temp = queue.shift();
        if(temp === null) return false;
        if(temp === prototype) return true;
        queue.push(temp.__proto__);
    }
}

// 测试
myInstanceof(new Date(), Date);         // true
myInstanceof({}, Object);               // true
myInstanceof('Jason', Number);          // false
myInstanceof(23, String);               // false

 

 
posted @ 2021-08-11 17:56  远方的少年🐬  阅读(47)  评论(0编辑  收藏  举报