摘抄自《javascript高級程序設計》一書。
javascript 是面向對象的語言,自然也有面向對象的一些特性。
一:構造函數方式
第一步選擇類名,即構造函數的名字。下面的例子在構造函數裏不創造對象,而是使用this,使用new 運算符調用構造函數的時候在執行第一行代碼前先創建一個對象,這個對象只能用this訪問,然後可以直接賦予this屬性,默認情況下是構造函數的返回值,不必return。
例子:
function Car(sColor,iDoors)
{
this.color = sColor;
this.doors = iDoors;
this.showColor = function()
{
alert(this.color);
};
}
var oCar1 = new Car("red",4);//output red
var oCar2 = new Car("blue",3);//output blue
上面的例子會爲每個對象都創建獨立的函數版本。再看下面的原型方式
二:原型方式:
該方式利用對象的prototype屬性,可把它看成創建新對象所依賴的原型。下面的例子使用空構造函數設置類名,然後所有的屬性和方法都直接賦予prototype屬性。在調用new Car()的時候原型的所有屬性都被立即賦予要創建的對象。
例子:
function Car()
{
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.showColor = function()
{
alert(this.color);
};
var oCar1 = new Car();//output red
上面的例子在創建多個實例後,對象的屬性值並沒有變。再看下面的混合的構造函數/原型方式
三:混合的構造函數/原型方式:
聯合使用構造函數和原型方式,就可以像其他程序設計語言楊創建對象。使用構造函數定義對象的所有非函數屬性,用原型方式定義對象的函數屬性。
function Car(sColor,iDoors)
{
this.color = sColor;
this.doors = iDoors;
}
Car.prototype.showColor = function()
{
alert(this.color);
};
var oCar1 = new Car("red",4);
var oCar2 = new Car("blue",3);
oCar1.showColor();//output red
oCar2.showColor();//output blue
四:動態原型方法:
動態原型方法的基本想法和混合的構造函數/原型方式相同,唯一的區別是賦予對象方法的位置,看下面的例子:
function Car(sColor,iDoors)
{
this.color = sColor;
this.doors = iDoors;
if(typeof Car.initialized == "undefined")//***
{
Car.prototype.showColor = function()
{
alert(this.color);
};
Car.initialized = true;//***
}
}
上面的方法使用標誌initialized來判斷是否已給原型賦予任何方法,該方法只創建並賦值一次。
五:混合工廠方式
這種方式的目的是創建假構造函數,只返回一種對象的新實例:
function Car()
{
var tempCar = new Object;
tempCar.color = "red";
tempCar.doors = 4;
tempCar.showColor = function()
{
alert(this.color);
};
return tempCar;
}
var oCar1 = new Car();
由於在Car()構造函數內部調用了new運算符,所以將忽略構造函數外的第2個new 運算符。不建議使用這種方式。
可以使用prototype屬性爲任何已有的類定義新的方法。