只在此山中,雲深不知處


聽首歌



© 2018 by Shawn Huang
Last Updated: 2018.5.27

物件

JavaScript是物件導向程式(true?),所以可以建立物件。 建立方式舉例如下:
這是一個客戶點的物件,裡面只包含數個變數。

物件方法


物件內除了有變數,還可以加上方法,原則上就是加上函數,修改上例如下:

說明:

call & apply


call()跟apply()兩個函數是用來呼叫一個方法,而輸入參數是物件。例如以下的例子:

new


除了上述的方式建立物件,也可以使用new關鍵字來建立,舉例如下: 看結果可知nodeC為一新建立的物件。


如果我們使用等號(=)將一個物件指派給另一個變數,原則上是傳址,也就是此時兩者為同一物件, 改變其中一個的數值會跟著改變另一個。例如:
將nodeA指派給變數nodeD,改變nodeD的x,y值,根據結果可知nodeA的x,y值也跟著更改了。

for in


若是要traverse整個物件,可以使用for in語法,例如: 這個方式可以很便利的依次取得物件中的所有變數名稱(當然包含方法)。若是要得到變數的值,可以將console.log(i);修改為console.log(Node[i]);,這是前述取得物件變數值得方式,那為何不使用Node.i呢?那是因為取得的i的資料型態是字串,所以會出錯。

adding & deleting properties


JavaScript允許我們自外部加上屬性,即使原來物件中並無定義也可以,例如修改之前的nodeC物件如下: 可以看到物件多了一個demand的屬性。若是要加入新的方法也可以,舉例如下:
新的方法info()被加入到nodeC內了。
可以刪除屬性,使用delete關鍵字,例如:

如果是繼承而來的物件,則只會刪除此物件內屬性,若是被繼承的物件,則繼承的物件內屬性都會被刪除。

constructor


通常我們還是希望對於同一類別的物件建立一個設計圖,此稱constructor,然後根據此類別來產生物件。在JavaScript使用關鍵字function來達成。例如:

根據此方式便可以建立物件。但是不可以在外部增加constructor的屬性,如此物件無法取得該屬性。

class


JavaScript尚可使用class關鍵字來建立物件。 >>

使用此方式可將constructor與methods分開來寫,容易分類,跟其他語言例如Java的寫法較為類似。此外,尚可跟Java一樣使用extends關鍵字做繼承。 >>
使用super關鍵字來呼叫父類別。

Prototype


原型(Prototype)是所有物件繼承鏈的最頂端,之前提到不能在外部增加constructor的屬性,但是可以修改其原型(Prototype)來達到修改的目的。例如:
我們在剛才的constructor的prototype加上一個新的變數跟一個新的方法。

Built-in Constructors


JavaScript包含數個內建的constructors供我們直接使用,計有:
  1. Object(): {}
  2. String(): ""
  3. Number(): 0
  4. Boolean(): true
  5. Array(): []
  6. RegExp(): /()/
  7. Function(): function(){}
  8. Date():
以上的內建constructor都可以使用類似var x = new Object();這樣的語法來產生,但是為了簡單化,所以只要給象徵的數值即可產生,例如給數字即知道是Number。