使用命令对象代替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 简单验证代码(用户名,密码,邮箱)
Sep 28 Javascript
jquery链式操作的正确使用方法
Jan 06 Javascript
$(document).ready(function() {})不执行初始化脚本
Jun 19 Javascript
使用原生js实现页面蒙灰(mask)效果示例代码
Jun 20 Javascript
详谈JavaScript内存泄漏
Nov 14 Javascript
jQuery.form插件的使用及跨域异步上传文件
Apr 27 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
May 25 Javascript
jQuery新窗口打开外链接
Jul 21 Javascript
基于模板引擎Jade的应用(详解)
Dec 12 Javascript
对vue下点击事件传参和不传参的区别详解
Sep 15 Javascript
LayUi数据表格自定义赋值方式
Oct 26 Javascript
js实现3D照片墙效果
Oct 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下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
php构造函数与析构函数
2016/04/23 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
jquery学习笔记 用jquery实现无刷新登录
2011/08/08 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
2018/04/22 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
python学生管理系统学习笔记
2019/03/19 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
Python模块常用四种安装方式
2020/10/20 Python
python中的split、rsplit、splitlines用法说明
2020/10/23 Python
英国最大的汽车交易网站:Auto Trader UK
2016/09/23 全球购物
美国在线鞋类零售商:LifeStride
2019/06/09 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
远程网络教育毕业生自我鉴定
2014/04/14 职场文书
地质灾害防治方案
2014/05/14 职场文书
《夹竹桃》教学反思
2016/02/23 职场文书
gateway网关接口请求的校验方式
2021/07/15 Java/Android
opencv检测动态物体的实现
2021/07/21 Python