JavaScript-手寫 instanceof 方法


手寫instanceof方法

instanceof判斷數據類型的原理

通過原型鏈來實現繼承關系的判斷(判斷變量__proto__屬性和構造函數prototype屬性的指向是否相同)

  • 例1:判斷num是否屬於Number類型

    var num = new Number(1);
    console.log(num instanceof Number);	// true
    

    image-1

    可以看到num__proto__Numberprototype指向相同,所以instanceof返回為true

  • 例2:自定義函數繼承,利用instanceof判斷繼承關系

    function Animal(name, calls) {
        this.name = name;
        this.say = function() {
            console.log(calls);
        }
    }
    
    const Cat = new Animal('貓', '喵');
    const Dog = new Animal('狗', '汪');
    

    image-2

    Cat.__proto__指向Animal,故Cat instanceof Animal返回true

    img-3

手寫instanceof

function myInstanceof(left, right) {
    let proto = left.__proto__;
    let prototype = right.prototype;
    
    // proto為空,即遍歷到原型鏈的盡頭
    // prototype為空,傳入的構造函數異常
    if (proto === null || prototype === null) {
        return false;
    } else if(proto === prototype){
        return true;
    } else {
        myInstanceof(proto, right);		// 遞歸,判斷right是否left的原型鏈上
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM