最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js創(chuàng)建對象的幾種常用方式小結(jié)(推薦)

 更新時間:2010年10月24日 17:35:04   作者:  
最近在看javascript高級程序設(shè)計,其中對對象的創(chuàng)建做了具體的闡述,綜合起來,總結(jié)了下(je知識庫javascript專欄由這方面的教程,有興趣的可以去知識庫看看)

第一種模式:工廠方式

復(fù)制代碼 代碼如下:

var lev=function(){
return "腳本之家";
};
function Parent(){
var Child = new Object();
Child.name="腳本";
Child.age="4";
Child.lev=lev;
return Child;
};
var x = Parent();
alert(x.name);
alert(x.lev());

說明:
1.在函數(shù)中定義對象,并定義對象的各種屬性,,雖然屬性可以為方法,但是建議將屬性為方法的屬性定義到函數(shù)之外,這樣可以避免重復(fù)創(chuàng)建該方法
2.引用該對象的時候,這里使用的是 var x = Parent()而不是 var x = new Parent();因為后者會可能出現(xiàn)很多問題(前者也成為工廠經(jīng)典方式,后者稱之為混合工廠方式),不推薦使用new的方式使用該對象
3.在函數(shù)的最后返回該對象
4.不推薦使用這種方式創(chuàng)建對象,但應(yīng)該了解
第二種模式:構(gòu)造函數(shù)方式
復(fù)制代碼 代碼如下:

var lev=function(){
return "腳本之家";
};
function Parent(){
this.name="腳本";
this.age="30";
this.lev=lev;
};
var x =new Parent();
alert(x.name);
alert(x.lev());

說明:
1.與工廠方式相比,使用構(gòu)造函數(shù)方式創(chuàng)建對象,無需再函數(shù)內(nèi)部重建創(chuàng)建對象,而使用this指代,并而函數(shù)無需明確return
2.同工廠模式一樣,雖然屬性的值可以為方法,扔建議將該方法定義在函數(shù)之外
3..同樣的,不推薦使用這種方式創(chuàng)建對象,但仍需要了解
第三種模式:原型模式
復(fù)制代碼 代碼如下:

var lev=function(){
return "腳本之家";
};
function Parent(){

};
Parent.prototype.name="李小龍";
Parent.prototype.age="30";
Parent.prototype.lev=lev;
var x =new Parent();
alert(x.name);
alert(x.lev());

說明:
1.函數(shù)中不對屬性進行定義
2.利用prototype屬性對屬性進行定義
3.同樣的,不推薦使用這樣方式創(chuàng)建對象
第四種模式:混合的構(gòu)造函數(shù),原型方式(推薦)
復(fù)制代碼 代碼如下:

function Parent(){
this.name="腳本";
this.age=4;
};
Parent.prototype.lev=function(){
return this.name;
};;
var x =new Parent();
alert(x.lev());

說明:1.該模式是指混合搭配使用構(gòu)造函數(shù)方式和原型方式
2.將所有屬性不是方法的屬性定義在函數(shù)中(構(gòu)造函數(shù)方式)
將所有屬性值為方法的屬性利用prototype在函數(shù)之外定義(原型方式)
3.推薦使用這樣方式創(chuàng)建對象,這樣做有好處和為什么不單獨使用構(gòu)造函數(shù)方式和原型方式,由于篇幅問題這里不予討論
第五種模式:動態(tài)原型方式
復(fù)制代碼 代碼如下:

function Parent(){
this.name="腳本";
this.age=4;

if(typeof Parent._lev=="undefined"){

Parent.prototype.lev=function(){
return this.name;
}
Parent._lev=true;
}
};

var x =new Parent();
alert(x.lev());


說明:
1.動態(tài)原型方式可以理解為混合構(gòu)造函數(shù),原型方式的一個特例
2.該模式中,屬性為方法的屬性直接在函數(shù)中進行了定義,但是因為
復(fù)制代碼 代碼如下:

if(typeof Parent._lev=="undefined"){

Parent._lev=true;}

從而保證創(chuàng)建該對象的實例時,屬性的方法不會被重復(fù)創(chuàng)建
3.,推薦使用這種模式

相關(guān)文章

最新評論

乌鲁木齐县| 溧阳市| 枣庄市| 吕梁市| 阳山县| 涿州市| 乌鲁木齐市| 易门县| 丹棱县| 依兰县| 藁城市| 绥棱县| 湟源县| 南开区| 望谟县| 罗山县| 竹溪县| 许昌市| 蕉岭县| 西乌珠穆沁旗| 浦江县| 如东县| 奉新县| 扶余县| 五寨县| 太原市| 南涧| 新和县| 曲水县| 东兰县| 香河县| 始兴县| 灵宝市| 灵台县| 高陵县| 常熟市| 北海市| 将乐县| 肥乡县| 昌乐县| 德昌县|