JavaScript 手寫new運算子

XiSoil發表於2024-09-16

new 關鍵字的工作步驟

  1. 建立一個新的物件 obj
  2. 將物件與構建函式透過原型鏈連線起來
  3. 將構建函式中的 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()

相關文章