使用命令对象代替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 相关文章推荐
图片按比例缩放函数
Jun 26 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
Jul 07 Javascript
JavaScript实现网页头部进度条刷新
Apr 16 Javascript
详解node HTTP请求客户端 - Request
May 05 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
vue+element-ui+ajax实现一个表格的实例
Mar 09 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
Mar 06 Javascript
vue增加强缓存和版本号的实现方法
May 01 Javascript
vue2.0项目集成Cesium的实现方法
Jul 30 Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 Javascript
javascript canvas实现雨滴效果
Jun 09 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
《Re:从零开始的异世界生活》剧情体验,手游新作定名
2020/04/09 日漫
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
JavaScript中函数表达式和函数声明及函数声明与函数表达式的不同
2015/11/15 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
bootstrap 模态框(modal)实现水平垂直居中显示
2017/01/23 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
Python 实现简单的电话本功能
2015/08/09 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
对python中类的继承与方法重写介绍
2019/01/20 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
实例讲解Python中整数的最大值输出
2019/03/17 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
材料化学应届生求职信
2013/10/09 职场文书
航空大学应届生求职信
2013/11/10 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
投标承诺书范本
2014/03/27 职场文书
请假条格式范文
2014/04/10 职场文书
小学毕业演讲稿
2014/04/25 职场文书
学校消防安全责任书
2014/07/23 职场文书
党支部鉴定意见
2015/06/02 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB