使用命令对象代替switch语句的写法示例


Posted in Javascript onFebruary 28, 2015

曾经有人说过,真正好的程序是没有if..else的,当然switch还不如if..else。JS规范里面是禁止使用switch的。

命令对象(command object)就完美的解决了这个问题。

引用一篇国外的博客提到的:

JavaScript 有着良好的控制流程语句,这些语句往往用花括号包裹着。不过有个例外:switch … case 语句。switch … case 的奇怪之处在于你必须在每个 case 末尾加上关键字 break,以防止流程控制权穿越进入下一个 case 语句中。穿越是指让多条 case 执行的手法,当未遇见预期的 break 时,控制权就自动交到下一句 case 手中。然而,就如同分号与花括号一样,你很有可能会在不经意之间忘了写 break,当这发生时,后期的错误排查就比较痛苦,因为语句本身是没错的。因此,配对地写 case … break 是个好习惯。
我们通常讲,JavaScript 有着优雅的对象字面量与顶级函数,这些都使得特定的方法查询变的非常简单。为方法查询所创建的对象,我们称之为 活动对象(action object) 或 命令对象(command object),它被运用在许多软件设计模式中,包括强大的而有用的命令模式。

实例:

// 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]();

    }

    // 测试结果

    var result1 = testSwitch('1');

    var result2 = testFn('2');

    console.info(result1, result2);
Javascript 相关文章推荐
让GoogleCode的SVN下的HTML文件在FireFox下正常显示.
May 25 Javascript
javaScript call 函数的用法说明
Apr 09 Javascript
jQuery '行 4954 错误: 不支持该属性或方法' 的问题解决方法
Jan 19 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
Nov 17 Javascript
代码触发js事件(click、change)示例应用
Dec 13 Javascript
JS实现的一个简单的Autocomplete自动完成例子
Apr 16 Javascript
JS实现适合于后台使用的动画折叠菜单效果
Sep 21 Javascript
JS中Eval解析JSON字符串的一个小问题
Feb 21 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
Mar 10 Javascript
微信小程序 this和that详解及简单实例
Feb 13 Javascript
js生成word中图片处理方法
Jan 06 Javascript
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
Jul 25 Javascript
Underscore.js常用方法总结
Feb 28 #Javascript
js实现文字跟随鼠标移动而移动的方法
Feb 28 #Javascript
jQuery实现tab标签自动切换的方法
Feb 28 #Javascript
js根据鼠标移动速度背景图片自动旋转的方法
Feb 28 #Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
Feb 28 #Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 #Javascript
JS网页在线获取鼠标坐标值的方法
Feb 28 #Javascript
You might like
PHP number_format() 函数定义和用法
2012/06/01 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
Bootstrap选项卡学习笔记分享
2017/02/13 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
angular2+node.js express打包部署的实战
2017/07/27 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
Python实现通过继承覆盖方法示例
2018/07/02 Python
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
Python引用计数操作示例
2018/08/23 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
使用Python FastAPI构建Web服务的实现
2020/06/08 Python
Django实现内容缓存实例方法
2020/06/30 Python
存储过程的优点有哪些
2012/09/27 面试题
应用化学专业本科生求职信
2013/09/29 职场文书
培训主管的岗位职责
2013/11/23 职场文书
大学生家政服务项目创业计划书
2014/01/30 职场文书
酒店优秀员工事迹材料
2014/06/02 职场文书
企业挂职心得体会
2014/09/10 职场文书
2015年重阳节活动总结
2015/03/24 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL