使用命令对象代替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 相关文章推荐
求得div 下 img的src地址的js代码
Feb 28 Javascript
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
Apr 21 Javascript
js图片延迟技术一般的思路与示例
Mar 20 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
Apr 25 Javascript
JavaScript实现梯形乘法表的方法
Apr 25 Javascript
js代码实现随机颜色的小方块
Jul 30 Javascript
jquery仿ps颜色拾取功能
Mar 08 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
vue2.0 和 animate.css的结合使用
Dec 12 Javascript
vue中Axios的封装与API接口的管理详解
Aug 09 Javascript
微信小程序签到功能
Oct 31 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
Jul 19 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过滤XSS攻击的函数
2013/11/12 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
实用的JS正则表达式(手机号码/IP正则/邮编正则/电话等)
2013/01/11 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
javascript中cookie对象用法实例分析
2015/01/30 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
jQuery中ajax的load()与post()方法实例详解
2016/01/05 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
2018/10/24 jQuery
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
小程序云开发教程如何使用云函数实现点赞功能
2019/05/18 Javascript
深入浅析vue中cross-env的使用
2019/09/12 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
JS函数本身的作用域实例分析
2020/03/16 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python检测网站链接是否已存在
2016/04/07 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
pycharm导入源码的具体步骤
2020/08/04 Python
Python tkinter之ComboBox(下拉框)的使用简介
2021/02/05 Python
实习医生自我评价
2013/09/22 职场文书
一分钟演讲稿
2014/04/30 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
十大最强飞行系宝可梦,BUG燕上榜,第二是飞行系王者
2022/03/18 日漫
Flutter集成高德地图并添加自定义Maker的实践
2022/04/07 Java/Android