使用命令对象代替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 相关文章推荐
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
vue.js全局API之nextTick全面解析
Jul 07 Javascript
AngularJs+Bootstrap实现漂亮的计算器
Aug 10 Javascript
vue的状态管理模式vuex
Nov 30 Javascript
js实现跳一跳小游戏
Jul 31 Javascript
JQuery Ajax如何实现注册检测用户名
Sep 25 jQuery
基于Vant UI框架实现时间段选择器
Dec 24 Javascript
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
JavaScript中跨域问题的深入理解
Mar 04 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
让焦点自动跳转
2006/07/01 Javascript
javascript 鼠标滚轮事件
2009/04/09 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
JavaScript/jQuery 表单美化插件小结
2012/02/14 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
Extjs grid添加一个图片状态或者按钮的方法
2014/04/03 Javascript
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
Position属性之relative用法
2015/12/14 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
AngularJS 避繁就简的路由
2016/07/01 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
JavaScript模拟实现自由落体效果
2018/08/28 Javascript
通过实例解析JavaScript常用排序算法
2020/09/02 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
python getopt详解及简单实例
2016/12/30 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
Windows 64位下python3安装nltk模块
2018/09/19 Python
python爬虫 爬取超清壁纸代码实例
2019/08/16 Python
python是怎么被发明的
2020/06/15 Python
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
校长先进事迹材料
2014/02/01 职场文书
入党推优材料
2014/06/02 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
创先争优个人承诺书
2014/08/30 职场文书
房产分割协议书范文
2014/11/21 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
MySQL控制流函数(-if ,elseif,else,case...when)
2022/07/07 MySQL