LeoWangJ / blog

紀錄學習文章
1 stars 0 forks source link

new 操作符 #28

Open LeoWangJ opened 4 years ago

LeoWangJ commented 4 years ago

上一篇介紹構造函數時有提到必須使用new 來呼叫,那麼為什麼需要new呢? new 到底做了什麼事情?

new 的四件事情

new是一種語法糖,它幫我們做了四件事情,讓我們先看代碼

let polyfillNew = (constructor,...args)=>{
   let obj = {} 
   Object.setPrototypeOf(obj, constructor.prototype) // 等同於 obj.__proto__ = constructor.prototype
   let result = constructor.call(obj,...args)
   return typeof result === 'object' ? result : obj
}
  1. 創建一個物件
  2. 將構造函數的原型指定到物件原型
  3. 構造函數中的this指向到新的物件
  4. 返回創建的物件, 若構造函數本身有返回物件類型的話就返回物件, 若不是則返回創建的物件

總結

其實new 所做的事情很簡單,拆解new所做的事情之後就清楚為什麼我們要創建實例時必須使用new操作符,它幫我們處理原型鏈以及this的指向,最後返回我們所需要的實例。