使用命令对象代替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 imgareaselect 使用利用js与程序结合实现图片剪切
Jul 30 Javascript
jQuery 表单验证扩展(四)
Oct 20 Javascript
如何在node的express中使用socket.io
Dec 15 Javascript
JavaScript学习笔记之定时器
Jan 22 Javascript
JavaScript编写推箱子游戏
Jul 07 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
Aug 21 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
JavaScript事件处理程序详解
Sep 19 Javascript
前后端如何实现登录token拦截校验详解
Sep 03 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
Dec 19 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
JS 动态加载js文件和css文件 同步/异步的两种简单方式
2016/09/23 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
ES6解构赋值的功能与用途实例分析
2017/10/31 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Python反射用法实例简析
2017/12/22 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
全球性的在线婚纱礼服工厂:27dress.com
2019/03/21 全球购物
招商业务员岗位职责
2013/12/16 职场文书
先进集体获奖感言
2014/02/13 职场文书
新年联欢会主持词
2014/03/27 职场文书
食品工程专业求职信
2014/06/15 职场文书
践行三严三实心得体会
2014/10/13 职场文书
物流业务员岗位职责
2015/04/03 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
民间借贷纠纷答辩状
2015/08/03 职场文书
2016年社区国庆节活动总结
2016/04/01 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
mysql 8.0.24 安装配置方法图文教程
2021/05/12 MySQL
python代码实现扫码关注公众号登录的实战
2021/11/01 Python
Java界面编程实现界面跳转
2022/06/16 Java/Android