天天看點

前端學習筆記(3) - JavaScript對象分類JavaScript中的對象分類函數對象與構造器對象

JavaScript中的對象分類

  • 宿主對象(host Objects):由 JavaScript 宿主環境提供的對象,它們的行為完全由宿主環境決定。
  • 内置對象(Built-in Objects):由 JavaScript 語言提供的對象。
    • 固有對象(Intrinsic Objects ):由标準規定,随着 JavaScript 運作時建立而自動建立的對象執行個體。
    • 原生對象(Native Objects):可以由使用者通過 Array、RegExp 等内置構造器或者特殊文法建立的對象。
    • 普通對象(Ordinary Objects):由{}文法、Object 構造器或者 class 關鍵字定義類建立的對象,它能夠被原型繼承。

函數對象與構造器對象

JavaScript中使用對象來模拟函數與構造器。JavaScript 為這一類對象預留了私有字段機制,并規定了抽象的函數對象與構造器對象的概念。

函數對象的定義是:具有 [[call]] 私有字段的對象,構造器對象的定義是:具有私有字段 [[construct]] 的對象。我們可以這樣說,任何對象隻需要實作 [[call]],它就是一個函數對象,可以去作為函數被調用。而如果它能實作 [[construct]],它就是一個構造器對象,可以作為構造器被調用。

程式員使用function關鍵字建立出來的對象同時擁有[[call]]、[[construct]]屬性,是以既可以被當做函數調用也可以當做構造器,隻不過它們的行為總是相似的。當傳回值為對象時函數對象與構造器對象的作用是相同的。當作為構造器對象使用時過程如下:

  1. 以 Object.protoype 為原型建立一個新對象;
  2. 以新對象為 this,執行函數的 [[call]];
  3. 如果 [[call]] 的傳回值是對象,那麼,傳回這個對象,否則傳回第一步建立的新對象。

es6中的=>函數隻能被當做函數調用。

繼續閱讀