五行代碼實現 JavaScript 中的 new 關鍵字

JS 高程中的解釋javascript

要建立 Person 的新實例,必須使用 new 操做符。以這種方式調用構造函數實際上會經歷如下 4 個步驟:
(1) 建立一個新對象;
(2) 將構造函數的做用域賦給新對象(所以 this 就指向了這個新對象);
(3) 執行構造函數中的代碼(爲這個新對象添加屬性);
(4) 返回新對象。

看了這個原理,想試着寫下實現過程,雖然不夠嚴謹。至少核心思想是體現出來了。java

模擬實現:app

// 先寫一個構造函數
function Person (name){
    this.name = name
}

// myNew 方法實現
function myNew(fn){
    let obj = Object.create(fn.prototype) // 建立一個對象,並將構造函數的原型對象賦給新建立的對象,即生成的實例與構造函數的原型對象關聯
    let res = fn.apply(obj, Array.prototype.slice.call(arguments, 1)) // 函數執行(爲該對象賦屬性)
    return obj // 返回該對象
}
console.log(p1 instanceof Person) // true
console.log(myNew(Person, 'Tom')) // Person{ "name":"Tom" }
相關文章
相關標籤/搜索