1. 程式人生 > >引用型別之Object

引用型別之Object

# 引用型別 引用類的值(物件)是**引用型別**的一個例項。在ECMAScript中,引用型別是一種資料結構,用於將資料和功能組織在一起。 物件是某個特定引用型別的**例項**。新物件是使用new操作符後跟一個**建構函式**來建立的。建構函式本身就是一個函式,只不過該函式是出於建立新物件的目的而定義的。 ```js var person=new Object(); ``` 這行程式碼建立了``Object``引用型別的一個新例項,然後把該例項儲存在了變數``person``中。使用的建構函式是``Object``,它只為新物件定義了預設的屬性和方法。ECMAScript提供了很多原生引用型別。 ## Object型別 建立``Object``例項的方式: 第一種,使用new操作符後跟Object建構函式,如下 ```js var person=new Object(); person.name="breeze"; person.age="20"; ``` 另一種方式是使用物件字面量表示法。物件字面量是物件定義的一種簡寫形式 ```js var person={ name:"breeze", age:20 } ``` 物件字面量是物件定義的一種簡寫形式,目的在於簡化建立包含大量屬性的物件的過程。 在使用物件字面量語法時,屬性名也可以使用字串,如下 ```js var person={ "name":"breeze", "age":20 } ``` 這個例子建立了一個物件,包含兩個屬性:name和age,但這裡的數值屬性名會自動轉換成字串,另外,使用物件字面量語法的時候,也可以留花括號然後自定義屬性和方法,例如 ```js var person={}; person.name="breeze"; person.age=20; ``` 注意點:物件字面量語法,更推薦在只考慮物件屬性名的可讀性時使用 ### 例項 雖然可以使用前面任何一種方法來定義物件,但是物件字面量也是向函式傳遞大量引數的首選方式,例如 ```js function dispalyInfo(args){ var output=""; if(typeof args.name == "string"){ output += "name:"+args.name+'\n' } if(typeof args.age =="number"){ output += "age:"+args.age+'\n' } alert(output) } dispalyInfo({ name:"breeze", age:20 }) //name:breeze //age:20 ``` 在這個例子中,函式displayInfo( )接收一個名為args的引數,這個引數可能帶有名為name和age的屬性,也可能啥也沒有,在這個函式內部,我們通過``typeof``操作符來檢測每個屬性是否存在,然後基於相應的屬性來構建出要顯示的資訊。我們呼叫這個函式時,所使用的時物件字面量語法來指定不同的資料。 **注:**這種傳參模式最適合需要向函式傳入大量可選引數的情形。 ### 物件屬性 一般來說,訪問物件屬性都是用的點表示法,不過也可以使用方括號來訪問物件的屬性。在使用方括號語法時,應該將要訪問的屬性以字串的形式放在方括號中,例子如下 ```js alert(person.name) alert(person["name"]) ``` 從功能上,兩種方法沒有區別,但方括號語法的主要優點是可以通過變數來訪問屬性,例如 ```js var person={ "name":"breeze", "age":20 } var propertyName="name"; alert(person[propertyName]); //"bree