JavaScript中有關new的問題

LuckXinXin發表於2020-11-04

涉及面試題:new 的原理是什麼?通過 new的方式建立物件和通過字面量建立有什麼區別?

在呼叫 new 的過程中會發生四件事情

  • 新生成了一個物件
  • 連結到原型
  • 繫結 this
  • 返回新物件

根據以上幾個過程,我們也可以試著來自己實現一個 new

  • 建立一個空物件
  • 獲取建構函式
  • 設定空物件的原型
  • 繫結 this 並執行建構函式
  • 確保返回值為物件
function create() {
  let obj = {}
  let Con = [].shift.call(arguments)
  obj.__proto__ = Con.prototype
  let result = Con.apply(obj, arguments)
  return result instanceof Object ? result : obj
}

  • 對於物件來說,其實都是通過 new 產生的,無論是 function Foo() 還是 let a = { b : 1 }
  • 對於建立一個物件來說,更推薦使用字面量的方式建立物件(無論效能上還是可讀性)。因為你使用 new Object() 的方式建立物件需要通過作用域鏈一層層找到 Object,但是你使用字面量的方式就沒這個問題
function Foo() {}
// function 就是個語法糖
// 內部等同於 new Function()
let a = { b: 1 }
// 這個字面量內部也是使用了 new Object()

相關文章