JavaScript中定義類或對象有多種方法:
以建立Car為執行個體說明。
var oCar = new Object;
oCar.color ="red";
oCar.doors = 4;
oCar.mpg=23;
oCar.showColor = function()
{
alert(this.color);
}
- 工廠方式構造,例如:
function createCar(sColor,iDoors,iMpg)
{
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors=iDoors;
oTempCar.mpg=iMpg;
oTempCar.showColor = function()
{
al(this.color)
}
return oTempCar;
}
弊端:每個對象都有自己的一個showColor函數。
function Car(sColor,iDoors,iMpg)
{
this.color= sColor;
this.doors = i;
this.mpg = iMpg;
this.showColor = function()
{
alert(this.color)
};
}
弊端:建構函式重複產生函數,可以用外部函數重寫建構函式(不太懂);
function Car()
{
}
Car.prototype.color = "red";
Car.prototype.doors =4;
Car.prototype.mpg = 23;
Car.prototype.drivers = new Array("Mike","Sue");
Car.prototype.showColor = function()
{
alert(this.color);
}
弊端:給一個執行個體添加drivers,另一個執行個體也添加了。
function Car()
{
}
Car.prototype.color = "red";
Car.prototype.doors =4;
Car.prototype.mpg = 23;
Car.prototype.drivers = new Array("Mike","Sue");
Car.prototype.showColor = function()
{
alert(this.color);
}
解決了兩種弊端。
function Car(sColor,iDoors,iMpg)
{
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike","Sue");
if(typeof Car._initialized == "undefined")
{
Car.prototype.showColor = function()
{
alert(this.color)
}
car._initialized = true;
}
}
function Car()
{
var oTempCar = new Object;
oTempCar.color="red";
oTempCar.doors = 4;
oTempCar.mpg = 23;
oTempCar.showColor = function()
{
ale(this.color)
}
return oTempCar;
}
採用哪種方式:
目前流行的是建構函式、原型方式,此外動態原型方式較為流行。