new 關鍵字的工作步驟
- 建立一個新的物件 obj
- 將物件與構建函式透過原型鏈連線起來
- 將構建函式中的 this 繫結到新建的物件 obj上根據構建函式返回型別作判斷,如果是原始值則被忽略,如果是返回物件,需要正常處理
const recodeNew = function (Func, ...args) { // 獲取函式物件原型 const obj = {} obj.__proto__ = Func.prototype // 繫結到新物件上執行 const result = Func.apply(obj, args) // 判斷 返回物件型別 return result instanceof Object ? result : obj } // 以下是測試程式碼 function Person(name, age) { this.name = name this.age = age } Person.prototype.print = function () { console.log({"姓名": this.name, "年齡": this.age}) } let p = recodeNew(Person, "小明", 18) console.log(p) p.print()