前端學習筆記(3) - 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中的=>函數只能被當做函數調用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章