使用命令對象代替switch語句的寫法示例
曾經(jīng)有人說過,真正好的程序是沒有if..else的,當(dāng)然switch還不如if..else。JS規(guī)范里面是禁止使用switch的。
命令對象(command object)就完美的解決了這個(gè)問題。
引用一篇國外的博客提到的:
JavaScript 有著良好的控制流程語句,這些語句往往用花括號包裹著。不過有個(gè)例外:switch … case 語句。switch … case 的奇怪之處在于你必須在每個(gè) case 末尾加上關(guān)鍵字 break,以防止流程控制權(quán)穿越進(jìn)入下一個(gè) case 語句中。穿越是指讓多條 case 執(zhí)行的手法,當(dāng)未遇見預(yù)期的 break 時(shí),控制權(quán)就自動交到下一句 case 手中。然而,就如同分號與花括號一樣,你很有可能會在不經(jīng)意之間忘了寫 break,當(dāng)這發(fā)生時(shí),后期的錯(cuò)誤排查就比較痛苦,因?yàn)檎Z句本身是沒錯(cuò)的。因此,配對地寫 case … break 是個(gè)好習(xí)慣。
我們通常講,JavaScript 有著優(yōu)雅的對象字面量與頂級函數(shù),這些都使得特定的方法查詢變的非常簡單。為方法查詢所創(chuàng)建的對象,我們稱之為 活動對象(action object) 或 命令對象(command object),它被運(yùn)用在許多軟件設(shè)計(jì)模式中,包括強(qiáng)大的而有用的命令模式。
實(shí)例:
// switch 方法
function testSwitch(name) {
switch (name) {
case '1':
return 'hack';
break;
case '2':
return 'slash';
break;
case '3':
return 'run';
break;
default:
return false;
break;
}
}
// 使用命令對象
function testFn(name) {
var names = {
'1': function() {
return 'hack';
},
'2': function() {
return 'slash';
},
'3': function() {
return 'run';
}
};
if (typeof names[name] !== 'function') {
return false;
}
return names[name]();
}
// 測試結(jié)果
var result1 = testSwitch('1');
var result2 = testFn('2');
console.info(result1, result2);
相關(guān)文章
HTML中的setCapture和releaseCapture使用介紹
setCapture函數(shù)的作用就是將后續(xù)的mouse事件都發(fā)送給這個(gè)對象,releaseCapture就是將鼠標(biāo)事件還回去,由 document、window、object之類的自行來處理。這樣就保證了在拖動的過程中,不會由于經(jīng)過了其它的元素而受到干擾2012-03-03
ECharts調(diào)用接口獲取后端數(shù)據(jù)的四種方法總結(jié)
echarts是我們經(jīng)常用到的數(shù)據(jù)可視化圖形,但是后端反饋給我們的數(shù)據(jù)經(jīng)常是數(shù)組包對象的集合類型,下面這篇文章主要給大家介紹了關(guān)于ECharts調(diào)用接口獲取后端數(shù)據(jù)的四種方法,需要的朋友可以參考下2022-11-11
BootStrap3學(xué)習(xí)筆記(一)之網(wǎng)格系統(tǒng)
本文給大家介紹BootStrap3網(wǎng)格系統(tǒng)的相關(guān)知識,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-05-05
如何自己實(shí)現(xiàn)JavaScript的new操作符
new大家肯定都不陌生,單身沒有對象的時(shí)候就new一個(gè),很方便。那么它在創(chuàng)建實(shí)例的時(shí)候,具體做了哪些操作呢?今天我們就來一起分析一下。2021-04-04
uniapp中使用?uni.navigateBack()?返回上級頁面并傳參的方法
最近遇到這樣的需求在A頁面中通過跳轉(zhuǎn)到B頁面,在B頁面中處理的數(shù)據(jù),需要跳轉(zhuǎn)回A頁面供其使用,本文給大家分享uniapp中使用?uni.navigateBack()?返回上級頁面并傳參的操作方法,感興趣的朋友一起看看吧2023-10-10
JavaScript裝飾器的實(shí)現(xiàn)原理詳解
最近在使用TS+Vue的開發(fā)模式,發(fā)現(xiàn)項(xiàng)目中大量使用了裝飾器,看得我手足無措,今天特意研究一下實(shí)現(xiàn)原理,方便自己理解這塊知識點(diǎn),有需要的小伙伴也可以參考一下2022-10-10
js實(shí)現(xiàn)前端圖片上傳即時(shí)預(yù)覽功能
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)前端圖片即時(shí)預(yù)覽功能,本地預(yù)覽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08

