W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
既然我們對(duì)模塊模式已經(jīng)有一些了解了,讓我們看一下改進(jìn)版本 - Christian Heilmann 的啟發(fā)式模塊模式。 啟發(fā)式模塊模式來自于,當(dāng)Heilmann對(duì)這樣一個(gè)現(xiàn)狀的不滿,即當(dāng)我們想要在一個(gè)公有方法中調(diào)用另外一個(gè)公有方法,或者訪問公有變量的時(shí)候,我們不得不重復(fù)主對(duì)象的名稱。他也不喜歡模塊模式中,當(dāng)想要將某個(gè)成員變成公共成員時(shí),修改文字標(biāo)記的做法。
因此他工作的結(jié)果就是一個(gè)更新的模式,在這個(gè)模式中,我們可以簡單地在私有域中定義我們所有的函數(shù)和變量,并且返回一個(gè)匿名對(duì)象,這個(gè)對(duì)象包含有一些指針,這些指針指向我們想要暴露出來的私有成員,使這些私有成員公有化。
下面給出一個(gè)如何使用暴露式模塊模式的例子:
var myRevealingModule = function () {
var privateVar = "Ben Cherry",
publicVar = "Hey there!";
function privateFunction() {
console.log( "Name:" + privateVar );
}
function publicSetName( strName ) {
privateVar = strName;
}
function publicGetName() {
privateFunction();
}
// Reveal public pointers to
// private functions and properties
return {
setName: publicSetName,
greeting: publicVar,
getName: publicGetName
};
}();
myRevealingModule.setName( "Paul Kinlan" );
這個(gè)模式可以用于將私有函數(shù)和屬性以更加規(guī)范的命名方式展現(xiàn)出來。
var myRevealingModule = function () {
var privateCounter = 0;
function privateFunction() {
privateCounter++;
}
function publicFunction() {
publicIncrement();
}
function publicIncrement() {
privateFunction();
}
function publicGetCount(){
return privateCounter;
}
// Reveal public pointers to
// private functions and properties
return {
start: publicFunction,
increment: publicIncrement,
count: publicGetCount
};
}();
myRevealingModule.start();
這個(gè)模式是我們腳本的語法更加一致。同樣在模塊的最后關(guān)于那些函數(shù)和變量可以被公共訪問也變得更加清晰,增強(qiáng)了可讀性。
這個(gè)模式的一個(gè)缺點(diǎn)是如果私有函數(shù)需要使用公有函數(shù),那么這個(gè)公有函數(shù)在需要打補(bǔ)丁的時(shí)候就不能被重載。因?yàn)樗接泻瘮?shù)仍然使用的是私有的實(shí)現(xiàn),并且這個(gè)模式不能用于公有成員,只用于函數(shù)。
公有成員使用私有成員也遵循上面不能打補(bǔ)丁的規(guī)則。
因?yàn)樯厦娴脑?,使用暴露式模塊模式創(chuàng)建的模塊相對(duì)于原始的模塊模式更容易出問題,因此在使用的時(shí)候需要小心。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: