js創(chuàng)建對(duì)象的幾種常用方式小結(jié)(推薦)
第一種模式:工廠方式
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());
說(shuō)明:
1.在函數(shù)中定義對(duì)象,并定義對(duì)象的各種屬性,,雖然屬性可以為方法,但是建議將屬性為方法的屬性定義到函數(shù)之外,這樣可以避免重復(fù)創(chuàng)建該方法
2.引用該對(duì)象的時(shí)候,這里使用的是 var x = Parent()而不是 var x = new Parent();因?yàn)楹笳邥?huì)可能出現(xiàn)很多問(wèn)題(前者也成為工廠經(jīng)典方式,后者稱(chēng)之為混合工廠方式),不推薦使用new的方式使用該對(duì)象
3.在函數(shù)的最后返回該對(duì)象
4.不推薦使用這種方式創(chuàng)建對(duì)象,但應(yīng)該了解
第二種模式:構(gòu)造函數(shù)方式
var lev=function(){
return "腳本之家";
};
function Parent(){
this.name="腳本";
this.age="30";
this.lev=lev;
};
var x =new Parent();
alert(x.name);
alert(x.lev());
說(shuō)明:
1.與工廠方式相比,使用構(gòu)造函數(shù)方式創(chuàng)建對(duì)象,無(wú)需再函數(shù)內(nèi)部重建創(chuàng)建對(duì)象,而使用this指代,并而函數(shù)無(wú)需明確return
2.同工廠模式一樣,雖然屬性的值可以為方法,扔建議將該方法定義在函數(shù)之外
3..同樣的,不推薦使用這種方式創(chuàng)建對(duì)象,但仍需要了解
第三種模式:原型模式
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());
說(shuō)明:
1.函數(shù)中不對(duì)屬性進(jìn)行定義
2.利用prototype屬性對(duì)屬性進(jìn)行定義
3.同樣的,不推薦使用這樣方式創(chuàng)建對(duì)象
第四種模式:混合的構(gòu)造函數(shù),原型方式(推薦)
function Parent(){
this.name="腳本";
this.age=4;
};
Parent.prototype.lev=function(){
return this.name;
};;
var x =new Parent();
alert(x.lev());
說(shuō)明:1.該模式是指混合搭配使用構(gòu)造函數(shù)方式和原型方式
2.將所有屬性不是方法的屬性定義在函數(shù)中(構(gòu)造函數(shù)方式)
將所有屬性值為方法的屬性利用prototype在函數(shù)之外定義(原型方式)
3.推薦使用這樣方式創(chuàng)建對(duì)象,這樣做有好處和為什么不單獨(dú)使用構(gòu)造函數(shù)方式和原型方式,由于篇幅問(wèn)題這里不予討論
第五種模式:動(dòng)態(tài)原型方式
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());
說(shuō)明:
1.動(dòng)態(tài)原型方式可以理解為混合構(gòu)造函數(shù),原型方式的一個(gè)特例
2.該模式中,屬性為方法的屬性直接在函數(shù)中進(jìn)行了定義,但是因?yàn)?
if(typeof Parent._lev=="undefined"){
Parent._lev=true;}
從而保證創(chuàng)建該對(duì)象的實(shí)例時(shí),屬性的方法不會(huì)被重復(fù)創(chuàng)建
3.,推薦使用這種模式
- JavaScript 三種創(chuàng)建對(duì)象的方法
- JS 創(chuàng)建對(duì)象(常見(jiàn)的幾種方法)
- JavaScript 創(chuàng)建對(duì)象
- js中創(chuàng)建對(duì)象的幾種方式示例介紹
- JS對(duì)象創(chuàng)建的幾種方式整理
- javascript轉(zhuǎn)換字符串為dom對(duì)象(字符串動(dòng)態(tài)創(chuàng)建dom)
- JavaScript中創(chuàng)建字典對(duì)象(dictionary)實(shí)例
- js創(chuàng)建對(duì)象的方法匯總
- js中常見(jiàn)的4種創(chuàng)建對(duì)象方式與優(yōu)缺點(diǎn)
相關(guān)文章
AppBaseJs 類(lèi)庫(kù) 網(wǎng)上常用的javascript函數(shù)及其他js類(lèi)庫(kù)寫(xiě)的
AppBaseJs類(lèi)庫(kù)。一個(gè)借鑒了網(wǎng)上常用的函數(shù)及其他js類(lèi)庫(kù)寫(xiě)的,方便大家的調(diào)用。2010-03-03
JavaScript面向?qū)ο蟪绦蛟O(shè)計(jì)三 原型模式(上)
在javaScript面向?qū)ο笤O(shè)計(jì)一和Javascript面向?qū)ο笤O(shè)計(jì)二中分別介紹了工廠模式和構(gòu)造函數(shù)模式,以及他們格式的優(yōu)缺點(diǎn),今天繼續(xù)講解原型模式2011-12-12
JS小框架 fly javascript framework
這幾天把工作中積累的東西整理成了一個(gè)小框架,分享給大家,希望對(duì)大家有用,也想聽(tīng)一下大家的批評(píng)2009-11-11
JavaScript面向?qū)ο笤O(shè)計(jì)二 構(gòu)造函數(shù)模式
在Javascript面向?qū)ο笤O(shè)計(jì)一——工廠模式 中介紹了使用CreateEmployee()函數(shù)創(chuàng)建員工類(lèi)。ECMAScript中的構(gòu)造函數(shù)可以用來(lái)創(chuàng)建特定類(lèi)型的對(duì)象,如Object和Array這樣的原生構(gòu)造函數(shù),在運(yùn)行時(shí)會(huì)自動(dòng)出現(xiàn)在執(zhí)行環(huán)境中,此外也可以創(chuàng)建自定義的構(gòu)造函數(shù),從而創(chuàng)建自定義對(duì)象類(lèi)型的屬性和方法2011-12-12
javascript 模式設(shè)計(jì)之工廠模式學(xué)習(xí)心得
接口的實(shí)現(xiàn),從而使不同子類(lèi)可以被同等的對(duì)待,恰當(dāng)?shù)氖褂霉S模式,但不要拘泥與形式,理解本質(zhì)。2010-04-04
編寫(xiě)可維護(hù)面向?qū)ο蟮腏avaScript代碼[翻譯]
編寫(xiě)可維護(hù)面向?qū)ο蟮腏avaScript代碼[翻譯],學(xué)習(xí)js面向?qū)ο缶帉?xiě)的朋友可以參考下。2011-02-02
javascript中類(lèi)的定義及其方式(《javascript高級(jí)程序設(shè)計(jì)》學(xué)習(xí)筆記)
javascript也是一種面向?qū)ο蟮木幊陶Z(yǔ)言。但是javascript中的類(lèi)相關(guān)的東西(類(lèi)的定義,原型鏈,繼承等)卻不是很好理解,特別是繼承。2011-07-07
JavaScript 設(shè)計(jì)模式學(xué)習(xí) Singleton
JavaScript設(shè)計(jì)模式學(xué)習(xí) Singleton2009-07-07
JavaScript類(lèi)和繼承 prototype屬性
本文介紹了JavaScript里面的prototype屬性。這個(gè)屬性是理解JavaScript類(lèi)和繼承的重要基礎(chǔ)。2010-09-09

