原生Javascript實現New方法

一、New

new 運算符創建一個用戶定義的對象類型的實例或具有構造函數的內置對象類型之一。

我就直接上代碼,加註釋:

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

    this.habit = 'Games';
}

Person.prototype.strength = 60;

Person.prototype.sayYourName = function () {
    console.log('I am ' + this.name);
}

function myNew(fn, ...args) {
    let obj = new Object() // 首先創建一個空的對象
    let F=function(){};
    F.prototype= fn.prototype;
    obj=new F();//指向原型
    let ret = fn.apply(obj, args) // 用fn這個構造函數,把其作用域指向obj對象,參數爲args
    //若構造函數fn返回的是引用類型,就返回ret;
    //若構造函數fn返回的是基本類型,就返回obj;
    return typeOf ret === 'object' ? ret : obj; //確保構造器總是返回一個對象
};

var person1 = myNew(Person, 'Kevin', '18')

 

發佈了45 篇原創文章 · 獲贊 4 · 訪問量 6722
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章