返回函數(shù)的JavaScript函數(shù)
幾個(gè)星期前,我發(fā)了一條微博說(shuō)我喜歡返回函數(shù)的函數(shù)。很快就出現(xiàn)了幾個(gè)回復(fù),基本是都是….什么東東?!對(duì)于一個(gè)程序員來(lái)說(shuō),理解返回函數(shù)的函數(shù)是一個(gè)非常重要的技能,使用它你能節(jié)省很多代碼,讓JavaScript更高效,讓你進(jìn)一步理解JavaScript的強(qiáng)大之處。下面是我寫(xiě)的幾個(gè)簡(jiǎn)單的例子,我希望通過(guò)它你能理解我所表達(dá)的意思。
假設(shè)你有一個(gè)對(duì)象,包含有兩個(gè)子對(duì)象,它們都有g(shù)et方法,這兩個(gè)方法非常相似,稍有不同:
var accessors = {
sortable: {
get: function() {
return typeof this.getAttribute('sortable') != 'undefined';
}
},
droppable: {
get: function() {
return typeof this.getAttribute('droppable') != 'undefined';
}
}
};
重復(fù)的代碼不是一個(gè)好的現(xiàn)象,所以我們要?jiǎng)?chuàng)建一個(gè)外部函數(shù),接受一個(gè)屬性名稱(chēng):
function getAttribute(attr) {
return typeof this.getAttribute(attr) != 'undefined';
}
var accessors = {
sortable: {
get: function() {
return getAttribute('sortable');
}
},
droppable: {
get: function() {
return getAttribute('droppable');
}
}
};
這樣好多了,但仍不完美,因?yàn)檫€是有些多余的部分,更好的方法是要讓它直接返回最終需要的函數(shù)——這樣能消除多余的函數(shù)執(zhí)行:
function generateGetMethod(attr) {
return function() {
return typeof this.getAttribute(attr) != 'undefined';
};
}
var accessors = {
sortable: {
get: generateGetMethod('sortable')
},
droppable: {
get: generateGetMethod('droppable')
}
};
/* 它跟最初的方法是完全等效的:*/
var accessors = {
sortable: {
get: function() {
return typeof this.getAttribute('sortable') != 'undefined';
}
},
droppable: {
get: function() {
return typeof this.getAttribute('droppable') != 'undefined';
}
}
};
*/
上面你看到的就是一個(gè)返回函數(shù)的函數(shù);每個(gè)子對(duì)象里都有了自己的get方法,但卻去掉了多余的函數(shù)嵌套執(zhí)行過(guò)程。
這是一種非常有用的技術(shù),能幫你消除重復(fù)相似的代碼,如果使用的恰當(dāng),能讓你的代碼更可讀,更易維護(hù)!
大家理解了嗎?
- js 字符串操作函數(shù)
- javascript currying返回函數(shù)的函數(shù)
- javascript 手機(jī)號(hào)碼正則表達(dá)式驗(yàn)證函數(shù)
- Javascript Math ceil()、floor()、round()三個(gè)函數(shù)的區(qū)別
- js 格式化時(shí)間日期函數(shù)小結(jié)
- js function定義函數(shù)使用心得
- js 小數(shù)取整的函數(shù)
- js正則函數(shù)match、exec、test、search、replace、split使用介紹集合
- js中字符替換函數(shù)String.replace()使用技巧
- 深入解析函數(shù)指針與返回函數(shù)的指針
相關(guān)文章
javascript計(jì)算星座屬相(十二生肖屬相)示例代碼
本文介紹了使用javascript計(jì)算星座和屬相的示例,這個(gè)可以用在用戶(hù)注冊(cè)的時(shí)候顯示出來(lái),大家參考使用吧2014-01-01
產(chǎn)制造追溯系統(tǒng)之通過(guò)微信小程序?qū)崿F(xiàn)移動(dòng)端報(bào)表平臺(tái)
這篇文章主要介紹了產(chǎn)制造追溯系統(tǒng)-通過(guò)微信小程序?qū)崿F(xiàn)移動(dòng)端報(bào)表平臺(tái) ,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
微信小程序基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件
這篇文章主要介紹了微信小程序-基于ColorUI構(gòu)建皮皮蝦短視頻去水印組件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11
javascript 獲取所有id中包含某關(guān)鍵字的控件的實(shí)現(xiàn)代碼
獲取某容器控件中id包含某字符串的控件id列表2010-11-11

