創(chuàng)建并返回特定類(lèi)型的對(duì)象。
代碼如下:
function createCar(sColor,iDoors,iMpg){
var oTempCar=new Object();
oTempCar.color=sColor;
oTempCar.doors=iDoors;
oTempCar.mpg=iMpg;
oTempCar.showColor=function(){
alert(this.color);
}
return oTempCar;
}
調(diào)用示例:
代碼如下:
var oCar1=createCar("red",4,23);
var oCar2=createCar("blue",3,25);
oCar1.showColor();
oCar2.showColor();
缺點(diǎn):方法重復(fù)創(chuàng)建了。如在上面的調(diào)用示例中,oCar1和oCar2均有自己的shoColor方法,但這個(gè)是可以共用的。
構(gòu)造函數(shù)方式
示例:
代碼如下:
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.door=iDoors;
this.mpg=iMpg;
this.showColor=function(){
alert(this.color);
}
}
調(diào)用示例:
代碼如下:
var oCar1=new Car("red",4,23);
var oCar2=new Car("blue",3,25);
缺點(diǎn):跟工廠方式一樣,方法重復(fù)創(chuàng)建了。
原型方式
本方式利用了對(duì)象的 prototype 屬性,可把它看成創(chuàng)建新對(duì)象所依賴(lài)的原型。這里用空構(gòu)造函數(shù)來(lái)設(shè)置類(lèi)名,然后所有的屬性和方法都被直接賦予 prototype 屬性,重寫(xiě)前面的例子,代碼如下:
代碼如下:
function Car(){
}Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.mpg=23;
Car.prototype.showColor=function(){
alert(this.color);
}
調(diào)用:
代碼如下:
var oCar1=new Car();
var oCar2=new Car();
缺點(diǎn):不能通過(guò)給構(gòu)造函數(shù)傳遞參數(shù)初始化屬性的值混合的構(gòu)造函數(shù)/原型方式
聯(lián)合使用構(gòu)造函數(shù)和原型方式,示例如下:
代碼如下:
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.door=iDoors;
this.mpg=iMpg;
}Car.prototype.showColor=function(){
alert(this.color);
}
調(diào)用示例:
代碼如下:
var oCar1=new Car("red",4,23);
var oCar2=new Car("blue",3,25);
優(yōu)點(diǎn):無(wú)內(nèi)存浪費(fèi),創(chuàng)建方便。這種方式是ECMAScript采用的主要方式。
動(dòng)態(tài)原型方法
使用混合的構(gòu)造函數(shù)/原型方式把對(duì)象的方法放在了對(duì)象外面定義,讓人感覺(jué)不是那么面向?qū)ο螅瑳](méi)有在視覺(jué)上進(jìn)行很好的封裝,因此產(chǎn)生了動(dòng)態(tài)原型方法:
代碼如下:
function Car(sColor,iDoors,iMpg){
this.color=sColor;
this.door=iDoors;
this.mpg=iMpg;
if(typeof Car._initialized=="undefined"){
Car.prototype.showColor=function(){
alert(this.color);
};
Car._initialized=true;
}
}
作者:Artwl
出處:http://artwl.cnblogs.com聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com