用原生js實現一個new方法


首先寫一個父類方法(包含參數name,age):

function Person(name,age){
    this.name = name;
    this.age = age;
}

new一個Person的實例p1做研究對比

var p1 = new Person("Richard", 22);
//此時p1包含name、age屬性,同時p1的__proto__指向Person的prototype
p1.name;//Richard
p1.age;//22
自定義一個New函數:
//通過分析原生的new方法可以看出,在new一個函數的時候,
// 會返回一個func同時在這個func里面會返回一個對象Object,
// 這個對象包含父類func的屬性以及隱藏的__proto__
function New(f) {
    //返回一個func
    return function () {
        var o = {"__proto__": f.prototype};
        f.apply(o, arguments);//繼承父類的屬性

        return o; //返回一個Object
    }
}

通過自定義New方法創建一個實例對象p2:

var p2 = New(Person)("Jack",25);
p2.name;//Jack
p2.age;//25

此時p2 instanceof Person 返回的是true;

Person.prototype.gender ="male";
p1.gender//male
p2.gender//male

 


免責聲明!

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



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