var 碼農(nóng)={
ID:1蓝谨,
具備技能:[java,javascript,php,html,css ],
初始頭發(fā)數(shù):n灌具,
寫代碼:function(){/*搬磚中,n=n-1*/}譬巫,
修電腦:function(){/*強(qiáng)行修電腦*/}稽亏,
};
AI.制造碼農(nóng)(碼農(nóng))缕题;
以上是我打算制造一個(gè)機(jī)器人碼農(nóng)截歉,那么它在計(jì)算機(jī)里面的大概狀態(tài)就是這個(gè)樣子,包含的屬性包括:ID烟零,具備技能瘪松,初始頭發(fā)數(shù),寫代碼(行為)锨阿,修電腦(行為)宵睦。
如果我要制造100個(gè)前端的碼農(nóng)呢?那么比較粗糙的方法如下:
var 碼農(nóng)們=[],碼農(nóng)墅诡;
for(var i=0;i<100;i++){
碼農(nóng)={
ID:i壳嚎,
具備技能:[javascript,html,css ],
初始頭發(fā)數(shù):n,
寫代碼:function(){/*搬磚中烟馅,n=n-1*/}说庭,
修電腦:function(){/*強(qiáng)行修電腦*/},
}
碼農(nóng)們.push(碼農(nóng))郑趁;
}刊驴;
AI.批量制造(碼農(nóng)們);
上面這種寫法會(huì)產(chǎn)生一個(gè)很大的問(wèn)題:每制造一個(gè)碼農(nóng)寡润,[寫代碼]和[修電腦]這兩個(gè)函數(shù)就會(huì)運(yùn)行一次捆憎,制造一百個(gè)就要運(yùn)行一百次,兩個(gè)函數(shù)就需要內(nèi)存開辟兩百次梭纹。因?yàn)檫@兩種行為對(duì)于這一百個(gè)碼農(nóng)都是一樣的躲惰,那么可以把這兩個(gè)行為各自引用一個(gè)函數(shù)就可以了,沒必要重復(fù)一百次变抽。[具備技能]這一欄因?yàn)槲覀冃枰氖乔岸舜a農(nóng)礁扮,所以也是技能一樣的,不需要?jiǎng)?chuàng)建一百次瞬沦。這樣就會(huì)大大減少內(nèi)存的占有。
那么對(duì)于多個(gè)對(duì)象具有一些相同屬性的時(shí)候雇锡,比較有效的方式是把相同的部分放到對(duì)象的prototype里面逛钻。代碼如下:
var 前端碼農(nóng)原型={
具備技能:[javascript,html,css ],
寫代碼:function(){/*搬磚中锰提,n=n-1*/}曙痘,
修電腦:function(){/*強(qiáng)行修電腦*/},
}
var 碼農(nóng)們=[]立肘,碼農(nóng);
for(var i=0;i<100;i++){
碼農(nóng)={
ID=i边坤,
初始頭發(fā)數(shù)=n
}
碼農(nóng).__proto__ =前端碼農(nóng)原型;
碼農(nóng)們.push(碼農(nóng))谅年;
}
AI.批量制造(碼農(nóng)們)茧痒;
對(duì)上面代碼進(jìn)行一下優(yōu)化:
var 前端碼農(nóng)原型={
具備技能:[javascript,html,css ],
寫代碼:function(){/*搬磚中融蹂,n=n-1*/}旺订,
修電腦:function(){/*強(qiáng)行修電腦*/},
}
function 碼農(nóng)(ID){
var 臨時(shí)對(duì)象={}超燃;
臨時(shí)對(duì)象.__proto__ =前端碼農(nóng)原型区拳;
臨時(shí)對(duì)象.ID=ID;
臨時(shí)對(duì)象.n=n;
return 臨時(shí)對(duì)象;
}
//然后對(duì)以上代碼進(jìn)行封裝后,就可以隨時(shí)隨地制造需要的AI碼農(nóng)了:
var 碼農(nóng)們=[]意乓,碼農(nóng)樱调;
for(var i=0;i<需要的數(shù)量;i++){
碼農(nóng)們.push(碼農(nóng)(i));
}
AI.批量制造(碼農(nóng)們);
上面封裝起來(lái)的這個(gè)方法,就是所謂的工廠模式(Factory Pattern)。它的主要作用就是解決創(chuàng)建多個(gè)相似對(duì)象過(guò)程中簡(jiǎn)化實(shí)現(xiàn)的過(guò)程笆凌,同時(shí)也可以減少每種對(duì)象所需的代碼量以及內(nèi)存占用圣猎。
簡(jiǎn)單來(lái)說(shuō):工廠模式就是一個(gè)函數(shù)里面返回一個(gè)對(duì)象,作用就是批量生產(chǎn)菩颖,效果就是減少代碼和內(nèi)存样漆。
雖然工廠模式的優(yōu)點(diǎn)很突出,但根據(jù)《JavaScript 高級(jí)程序設(shè)計(jì)》144頁(yè)的描述:“卻沒有解決對(duì)象識(shí)別的問(wèn)題”晦闰。這句話是什么意思作為js小白的我還是一臉懵逼的放祟,但“構(gòu)造函數(shù)模式”貌似解決了這個(gè)問(wèn)題。
構(gòu)造函數(shù)模式即在代碼里加個(gè)”new“呻右。至于new的原理和new與工廠模式之間的差異跪妥,回頭我再研究研究,敬請(qǐng)期待声滥。