建立進階對象使用建構函式來建立對象
建構函式是一個函數,調用它來例示並初始化特殊類型的對象。可以使用 new 關鍵字來調用一個建構函式。下面給出了使用建構函式的新樣本。
var myObject = new Object(); // 建立沒有屬性的通用對象。var myBirthday = new Date(1961, 5, 10); // 建立一個 Date 對象。var myCar = new Car(); // 建立一個使用者定義物件,並初始化其屬性。
通過建構函式將一個參數作為特定的 this 關鍵字的值傳遞給新建立的Null 物件。然後建構函式負責為新對象執行適應的初始化(建立屬性並給出其初始值)。完成後,建構函式返回它所構造的對象的一個參數。
編寫建構函式
可以使用 new 運算子結合像 Object()、Date() 和 Function() 這樣的預定義的建構函式來建立對象並對其初始化。物件導向的編程其強有力的特徵是定義自訂建構函式以建立指令碼中使用的自訂對象的能力。建立了自訂的建構函式,這樣就可以建立具有已定義屬性的對象。下面是自訂函數的樣本(注意 this 關鍵字的使用)。
function Circle (xPoint, yPoint, radius) {this.x = xPoint; // 圓心的 x 座標。 this.y = yPoint; // 圓心的 y 座標。 this.r = radius; // 圓的半徑。}
調用 Circle 建構函式時,給出圓心點的值和圓的半徑(所有這些元素是完全定義一個獨特的圓對象所必需的)。結束時 Circle 對象包含三個屬性。下面是如何例示 Circle 對象。
var aCircle = new Circle(5, 11, 99);
使用原型來建立對象
在編寫建構函式時,可以使用原型對象(它本身是所有建構函式的一個屬性)的屬性來建立繼承屬性和共用方法。原型屬性和方法將按引用複製給類中的每個對象,因此它們都具有相同的值。可以在一個對象中更改原型屬性的值,新的值將覆蓋預設值,但僅在該執行個體中有效。屬於這個類的其他對象不受此更改的影響。下面給出了使用自訂建構函式的樣本,Circle(注意 this 關鍵字的使用)。
Circle.prototype.pi = Math.PI;function ACirclesArea () {return this.pi * this.r * this.r; // 計算圓面積的公式為 ?r2。}Circle.prototype.area = ACirclesArea; // 計算圓面積的函數現在是 Circle Prototype 對象的一個方法。var a = ACircle.area(); // 此為如何在 Circle 對象上調用面積函數。
使用這個原則,可以給預定義的建構函式(都具有原型對象)定義附加屬性。例如,如果想要能夠刪除字串的前後空格(與 VBScript 的 Trim 函數類似),就可以給 String 原型對象建立自己的方法。
// 增加一個名為 trim 的函數作為// String 建構函式的原型對象的一個方法。String.prototype.trim = function(){ // 用Regex將前後空格 // 用Null 字元串替代。 return this.replace(/(^\s*)|(\s*$)/g, "");}// 有空格的字串var s = " leading and trailing spaces ";// 顯示 " leading and trailing spaces (35)"window.alert(s + " (" + s.length + ")");// 刪除前後空格s = s.trim();// 顯示"leading and trailing spaces (27)"window.alert(s + " (" + s.length + ")");