JavaScript1.5 物件的操作(Working with Objects)
索引物件屬性(Indexing Object Properties)
在 JS 1.0,您可以由它們的屬性名稱或由其順序的索引來參考引用物件的屬性。如果您一開始以其名稱來定義屬性的話,則您必須總是使用其名稱來參考引用它;而且如果您一開始是由其索引來定義屬性,則您必須總是使用其索引來參考引用它。
這適用於當您使用建構式函式來建立物件及其屬性時,就像先前談及之 car 物件類型的例子,以及當您明確地定義個別屬性(例如,myCar.color = "red")。因此,如果您一開始是以其索引來定義物件的屬性,(例如,myCar[5] = "25 mpg"),接下您就可以用 myCar[5] 來參考引用。
這個規則的例外是從 HTML 所反映的物件,例如表單陣列(forms array)。您可以總是由它們的序數(ordinal number)或它們的名稱(假如有定義的話)來參考引用這些陣列中的物件。例如,假設在一份文件中,第二個 <form> 標籤有一個 name 屬性,其值為 myForm,您可以參考引用此 form,其方式為 document.forms[1] 或者 document.forms["myForm"] 或者 document.myForm。
定義物件類型的屬性(Defining Properties for an Object Type)
您可以藉由 prototype 屬性來增加屬性到先前所定義的物件類型中。其所定義的屬性是由指定類型的所有物件所共用,而不是只有一個物件的實例。以下的程式碼是增加一個 color 屬性到 car 類型的所有物件中,然後指派一個值給 car1 物件的 color 屬性。
car.prototype.color = null; car1.color = "black";
定義方法(Defining Methods)
方法(Method)是與物件相關聯的函式。您定義一個方法跟您定義一個標準函式是相同的方式。然後,您可以使用如下的語法將該函數與現有的物件做關聯:
object.methodname = function_name
在上述之中,object 是現有的一個物件,methodname 是您所指派方法的名稱,而 function_name 則是函式的名稱。
然後您就可以呼叫在物件範圍內的方法,如下所示:
object.methodname(params);
您可以藉由建構式函式中所包括的方法定義為物件類型定義方法。例如,您可以定義如先前我們所定義 car 物件的格式與顯示之屬性的一個函式,例如:
function displayCar() {
var result = "A Beautiful " + this.year + " " + this.make + " " + this.model;
pretty_print(result);
}
其中 pretty_print 是函式用以顯示平面規則與字串。請注意使用 this 參考引用該方法所屬的物件。
您可以將這個函式的 car 方法藉由敘述來加入:
this.displayCar = displayCar;
回到先前 car 物件的定義上。所以,整個 car 現在的定義就像:
function car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
this.displayCar = displayCar;
}
然後您可以為每個物件呼叫 displayCar 方法,如下所示:
car1.displayCar() //結果為 A Beautiful 1993 Eagle Talon TSi
car2.displayCar() //結果為 A Beautiful 1992 Nissan 300ZX
使用物件參考的 this(Using this for Object References)
JS 有特殊的關鍵字 this,您可以使用這個關鍵字來參考引用目前的物件。舉例來說,假設您有個名為 validate 的函式,然後給物件高低值,來驗證物件之值的屬性:
function validate(obj, lowval, hival) {
if ((obj.value < lowval) || (obj.value > hival))
alert("Invalid Value!");
}
然後,您在每個表單元素的 onchange 事件處理可以呼叫 validate 透過 form 元素來使用,如下範例所示:
<input type="text" name="age" size="3" onChange="validate(this, 18, 99)">
一般來說,this 是參考引用呼叫物件的方法。
當與 form 屬性結合時, this 可以參考引用目前物件的父表單。以下的範例中,表單 myForm 包含 Text 物件與按鈕。當使用者按下按鈕,Text 物件的值被設定到表單的名稱。按鈕的 onclick 事件處理是使用 this.form 來參考引用父表單 myForm。
<form name="myForm"> <p><label>Form name:<input type="text" name="text1" value="Beluga"></label></p> <p><input name="button1" type="button" value="Show Form Name" onclick="this.form.text1.value=this.form.name"></p> </form>
刪除屬性(Deleting Properties)
您可以使用 delete 運算子來移除屬性。以下的程式碼顯示如何來移除屬性。
//建立一個名稱為 myobj 的新物件,並且它有兩個屬性 a 與 b。 myobj = new Object; myobj.a = 5; myobj.b = 12; //移除屬性 a,只留下 myobj 的屬性 b。 delete myobj.a;
假如 var 關鍵字並未被使用來宣告變數的話,您也可以使用 delete 來刪除全域變數(Global Variable):
g = 17; delete g;
內建的核心物件(Predefined Core Objects)
所謂內建的核心物件,就是 JS 本身預設的一些建構式函式,例如陣列物件就是 Array() 建構式函式,而 Array 是表示屬於 Array 類別(class)的物件。須注意的是在 JS 中,並沒有所謂如同 Java 或 C 語言般的真實類別,在 JS 裡的類別指的是擬類別(pseudo-class)。
- Core Object – Object 物件(Object Object)
- Core Object – 陣列物件(Array Object)
- Core Object – 布林物件(Boolean Object)
- Core Object – 日期物件(Date Object)
- Core Object – 函式物件(Function Object)
- Core Object – 數學函式物件(Math Object)
- Core Object – 數值物件(Number Object)
- Core Object – 正規表達式物件(RegExp Object)
- Core Object – 字串物件(String Object)