使用命令对象代替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按回车提交数据的代码示例
Nov 05 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
Apr 12 Javascript
JavaScript常用函数工具集:lao-utils
Mar 01 Javascript
浅谈js和css内联外联注意事项
Jun 30 Javascript
JS类的定义与使用方法深入探索
Nov 26 Javascript
微信小程序 基础组件与导航组件详细介绍
Feb 21 Javascript
webpack处理 css\less\sass 样式的方法
Aug 21 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
Dec 19 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
vue路由拦截器和请求拦截器知识点总结
Nov 08 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 裁剪图片成固定大小代码方法
2009/09/09 PHP
PHP在线书签系统分享
2016/01/04 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
javascript 用函数语句和表达式定义函数的区别详解
2014/01/06 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
理解javascript中的Function.prototype.bind的方法
2017/02/03 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
详解Python中的元组与逻辑运算符
2015/10/13 Python
Python最火、R极具潜力 2017机器学习调查报告
2017/12/11 Python
python实现批量图片格式转换
2020/06/16 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python读取word 中指定位置的表格及表格数据
2019/10/23 Python
python 动态渲染 mysql 配置文件的示例
2020/11/20 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
Expedia印度尼西亚站:预订酒店、廉价航班和度假套餐
2018/01/31 全球购物
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
《中国的气候》教学反思
2014/02/23 职场文书
能源工程专业应届生求职信
2014/03/01 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
Python合并pdf文件的工具
2021/07/01 Python
Golang获取List列表元素的四种方式
2022/04/20 Golang