使用命令对象代替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.extend 函数详解
Feb 03 Javascript
jquery实现简单易懂的图片展示小例子
Nov 21 Javascript
JavaScript中的类(Class)详细介绍
Dec 30 Javascript
js实现文字闪烁特效的方法
Dec 17 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
Feb 17 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
使用jquery如何获取时间
Oct 13 Javascript
vue省市区三联动下拉选择组件的实现
Apr 28 Javascript
Angular4学习教程之DOM属性绑定详解
Jan 04 Javascript
JavaScript中为事件指定处理程序的五种方式分析
Jul 27 Javascript
ES6中字符串的使用方法扩展
Jun 04 Javascript
Bootstrap FileInput实现图片上传功能
Jan 28 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可逆加密/解密函数分享
2012/09/25 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
微信小程序学习总结(二)样式、属性、模板操作分析
2020/06/04 Javascript
[45:44]完美世界DOTA2联赛PWL S2 FTD vs PXG 第一场 11.27
2020/12/01 DOTA
Python字符遍历的艺术
2008/09/06 Python
python分析nignx访问日志脚本分享
2015/02/26 Python
简单介绍Python中的floor()方法
2015/05/15 Python
python开发利器之ulipad的使用实践
2017/03/16 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python学习小技巧总结
2018/06/10 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
关于numpy中eye和identity的区别详解
2019/11/29 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
python爬取音频下载的示例代码
2020/10/19 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
店长岗位职责
2013/11/21 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
对公司合理化的建议书
2014/03/12 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
社区敬老月活动总结
2015/05/07 职场文书
Redis 持久化 RDB 与 AOF的执行过程
2021/11/07 Redis
python如何为list实现find方法
2022/05/30 Python