引言 對象是JavaScript的基本數據類型。 對象是一種複合值:將很多值(原始值或者其他對象)聚合在一起,通過名字訪問這些值。 對象可以看做屬性的無序集合,每個屬性都是一個名/值對。屬性名是字元串。 對象還可以看做字元串到值的映射。 除了可以保持自有的屬性,對象還可以從一個稱為原型的對象繼承屬性 ...
引言
對象是JavaScript的基本數據類型。
對象是一種複合值:將很多值(原始值或者其他對象)聚合在一起,通過名字訪問這些值。
對象可以看做屬性的無序集合,每個屬性都是一個名/值對。屬性名是字元串。
對象還可以看做字元串到值的映射。
除了可以保持自有的屬性,對象還可以從一個稱為原型的對象繼承屬性--“原型式繼承”是JavaScript的核心特征。
對象的動態性
對象可以新增屬性,也可以刪除屬性。
通常用於模擬靜態對象以及靜態類型語言種的“結構體”(struct)。有時它們也用做字元串的集合(忽略名/值對種的值)。
對象的可變性
JavaScript中通過引用而非值來操作對象。
常見用法
對象屬性最常用的用法是:
- 創建(create)
- 設置(set)
- 查找(query)
- 刪除(delete)
- 檢測(test)
- 枚舉(enumerate)
屬性特性
在JavaScript對象的屬性中,除了名字和值之外,還有一個與之相關的值,稱為“屬性特性”(property attribute):
- 可寫(writable attribute) -- 表明是否可以設置該屬性的值;
- 可枚舉(enumerable attribute) -- 表明是否可以通過for/in迴圈返回該屬性;
- 可配置(configurable attribute) -- 表明是否可以刪除或修改該屬性。
對象特性
除了包含屬性之外,每個對象還擁有三個相關的對象特性(object attribute):
- 對象的原型(prototype)指向另外一個對象,本對象的屬性繼承自它的原型對象;
- 對象的類(class)是一個表示對象類型的字元串;
- 對象的擴展標記(extensible flag)指明瞭(在ECMAScript 5中)是否可以指向該對象添加新屬性。
三類JavaScript對象和兩類屬性
三類JavaScript對象
- 內置對象(native object)是由ECMAScript規範定義的對象或類,例如,數組、函數、日期和正則表達式都是內置對象。
- 宿主對象(host object)是由JavaScript解釋器所嵌入的宿主對象(比如Web瀏覽器)定義的;
自定義對象(user-defined object)是由運行中的JavaScript代碼創建的對象;
兩個屬性
- 自有屬性(own property)是直接在對象中定義的屬性;
繼承屬性(inherited property)是在對象的原型對象中定義的屬性。