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" }