使用命令对象代替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 相关文章推荐
使用jQuery同时控制四张图片的伸缩实现代码
Apr 19 Javascript
JavaScript生成GUID的多种算法小结
Aug 18 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
JavaScript实现梯形乘法表的方法
Apr 25 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
如何用js判断dom是否有存在某class的值
Feb 13 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
self.attachevent is not a function的解决方法
Apr 04 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
JavaScript基本语法_动力节点Java学院整理
Jun 26 Javascript
浅谈vue中改elementUI默认样式引发的static与assets的区别
Feb 03 Javascript
Vue+Koa2 打包后进行线上部署的教程详解
Jul 31 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处理restful请求的路由类分享
2014/02/27 PHP
php关联数组快速排序的方法
2015/04/17 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
解决Laravel blade模板转义html标签的问题
2019/09/03 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
vue组件开发props验证的实现
2019/02/12 Javascript
Angular单元测试之事件触发的实现
2020/01/20 Javascript
vue 组件间的通信之子组件向父组件传值的方式
2020/07/29 Javascript
Python正规则表达式学习指南
2016/08/02 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python 操作 ElasticSearch的完整代码
2019/08/04 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
深入浅析HTML5中的SVG
2015/11/27 HTML / CSS
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
医院护士求职自荐信格式
2013/09/21 职场文书
幼儿园师德演讲稿
2014/05/06 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
师德师风自查材料
2014/10/14 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
css实现文章分割线样式的多种方法总结
2021/04/21 HTML / CSS
详细总结Python常见的安全问题
2021/05/21 Python
Golang解析JSON对象
2022/04/30 Golang