使用命令对象代替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 相关文章推荐
javascript 简单抽屉效果的实现代码
Mar 09 Javascript
IE与FireFox的JavaScript兼容问题解决办法
Dec 31 Javascript
JavaScript link方法入门实例(给字符串加上超链接)
Oct 17 Javascript
javascript判断数组内是否重复的方法
Apr 21 Javascript
深入探讨javascript函数式编程
Oct 11 Javascript
详解javascript事件冒泡
Jan 09 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
Jan 26 Javascript
使用Node.js处理前端代码文件的编码问题
Feb 16 Javascript
JavaScript的设计模式经典之建造者模式
Feb 24 Javascript
js前端实现多图图片上传预览的两个方法(推荐)
Nov 18 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
Jan 03 Javascript
vue iview组件表格 render函数的使用方法详解
Mar 15 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
Nginx环境下PHP flush失效的解决方法
2016/10/19 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
2008/09/27 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
浅谈jQuery的offset()方法及示例分享
2015/07/17 Javascript
JavaScript知识点整理
2015/12/09 Javascript
值得学习的bootstrap fileinput文件上传工具
2016/11/08 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Flask配置Cors跨域的实现
2019/07/12 Python
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
中层干部培训方案
2014/06/16 职场文书
交通事故委托书范本
2014/09/28 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
领导工作表现评语
2015/01/04 职场文书
音乐会主持人开场白
2015/05/28 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
银行培训心得体会范文
2016/01/09 职场文书
基于Redis结合SpringBoot的秒杀案例详解
2021/10/05 Redis
MySQL去除密码登录告警的方法
2022/04/20 MySQL