使用命令对象代替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
Feb 25 Javascript
jquery 插件开发备注
Aug 27 Javascript
jQuery+css+html实现页面遮罩弹出框
Mar 21 Javascript
让js弹出窗口居前显示的实现方法
Jul 10 Javascript
两个select多选模式的选项相互移动(示例代码)
Jan 11 Javascript
js报$ is not a function 的问题的解决方法
Jan 20 Javascript
微信小程序 教程之注册程序
Oct 17 Javascript
利用百度地图API获取当前位置信息的实例
Nov 06 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
关于TypeScript模块导入的那些事
Jun 12 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
Sep 30 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
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
ThinkPHP中自定义错误页面和提示页面实例
2014/11/22 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
PHP中的访问修饰符简单比较
2019/02/02 PHP
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JavaScript对象反射用法实例
2015/04/17 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
vue文件树组件使用详解
2018/03/29 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
ptyhon实现sitemap生成示例
2014/03/30 Python
python中__call__内置函数用法实例
2015/06/04 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
keras获得model中某一层的某一个Tensor的输出维度教程
2020/01/24 Python
css3 自定义字体font-face使用介绍
2014/05/14 HTML / CSS
CSS3 边框效果
2019/11/04 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
软件工程专业推荐信
2013/10/28 职场文书
小学生运动会报道稿
2014/09/12 职场文书
县长群众路线对照检查材料思想汇报
2014/10/02 职场文书
报名委托书
2015/01/29 职场文书
国庆阅兵观后感
2015/06/15 职场文书
班级班风口号大全
2015/12/25 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
php中pcntl_fork详解
2021/04/01 PHP
Pytorch 实现变量类型转换
2021/05/17 Python