Javascript中的方法链(Method Chaining)介绍


Posted in Javascript onMarch 15, 2015

在寻找如何设计一个Javascript API的时候,发现了Method Chaining这个东西,方法链,看上去似乎很强大,也挺有意思的,而这个东西也是过去我们经常看到的。。

Javascript Method Chaining

在维基百科上有这样的解释:

Method chaining, also known as named parameter idiom, is a common syntax for invoking multiple method calls in object-oriented programming languages. Each method returns an object, allowing the calls to be chained together in a single statement.Chaining is syntactic sugar which eliminates the need for intermediate variables. A method chain is also known as a train wreck due to the increase in the number of methods that come one after another in the same line that occurs as more methods are chained togethe even though line breaks are often added between methods.

拿翻译工具翻译了一下:

方法链,也被称为命名参数法,是在面向对象的编程语言调用的调用多个方法的通用语法。每一个方法返回一个对象,允许电话连接到一起,在一个单一的声明。链接是语法糖,省去了中间变量的需要。方法链也被称为火车残骸中由于方法来相继发生的同一行以上的方法都锁在即使换行通常添加方法间的数量增加。

Method Chaining 使用

目测对于方法链用得最多的,应该就是jQuery了。

// chaining

$("#person").slideDown('slow')

   .addClass('grouped')

   .css('margin-left', '11px');

我们可以用这样的用法来调用这个。jQuery严重依赖于链接。这使得它很容易调用的几个方法相同的选择。这也使得代码更清晰和防止执行相同的选择几次(提高性能)。没有方法链的时候则是下面的样子
var p = $('#person');

p.slideDown('slow');

p.addClass('grouped');

p.css('margin-left', '11px');

看上去和设计模式中的builder很像,不同的是,这里的p是方法,而不是一个类。

Javascript 方法链示例

在之前我们说到Javascript 高阶函数 的时候,说到的print('Hello')('World'),而这种用法的结果可能会变成这样子。

function f(i){

  return function(e){

    i+=e;

    return function(e){

      i+=e;

      return function(e){

        alert(i+e);

      };

    };

  };

};

f(1)(2)(3)(4); //10

这是网上的一个例子,然而也是我上一次写链式调用的作法。看上去弱爆了。
var func = (function() {

    return{

        add: function () {

            console.log('1');

            return{

                result: function () {

                    console.log('2');

                }

            }

        }

    }

})();
func.add().result();

实际上应该在每个function都要有个return this,于是就有了:
Func = (function() {

    this.add = function(){

        console.log('1');

        return this;

    };

    this.result = function(){

        console.log('2');

        return this;

    };

    return this;

});
var func = new Func();

func.add().result();

当然我们也可以将最后的两句
var func = new Func();

func.add().result();

变成
new Func().add().result();

其他

最后作为一个迷惑的地方的小比较:

Method Chaining VS prototype Chaining

原型链与方法链在某些方面上是差不多的,不同的地方或许在于

1.原型链是需要用原型
2.方法链则是用方法

Javascript 相关文章推荐
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
js判断IE浏览器版本过低示例代码
Nov 22 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
Mar 20 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
Dec 07 Javascript
JQuery为元素添加样式的实现方法
Jul 20 Javascript
react-native fetch的具体使用方法
Nov 01 Javascript
Vue组件通信之Bus的具体使用
Dec 28 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
Aug 09 Javascript
JS实现省市县三级下拉联动
Apr 10 Javascript
vue 给数组添加新对象并赋值
Apr 20 Vue.js
Javascript中的apply()方法浅析
Mar 15 #Javascript
Javascript中的Callback方法浅析
Mar 15 #Javascript
Javascript中的call()方法介绍
Mar 15 #Javascript
Javascript中的高阶函数介绍
Mar 15 #Javascript
Javascript中this关键字的一些小知识
Mar 15 #Javascript
Javascript URI 解析介绍
Mar 15 #Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 #Javascript
You might like
谈谈PHP语法(4)
2006/10/09 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
jQuery+Ajax实现无刷新操作
2016/01/04 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
vue中v-for加载本地静态图片方法
2018/03/03 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
VUE中setTimeout和setInterval自动销毁案例
2020/09/07 Javascript
在实例中重学JavaScript事件循环
2020/12/03 Javascript
keras中的History对象用法
2020/06/19 Python
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
国贸专业的职业规划范文
2014/01/23 职场文书
表演方阵解说词
2014/02/08 职场文书
平安工地建设方案
2014/05/06 职场文书
触电现场处置方案
2014/05/14 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
捐书仪式主持词
2015/07/04 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
初中物理教学反思
2016/02/19 职场文书
Python虚拟环境virtualenv是如何使用的
2021/06/20 Python
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
MySQL批量更新不同表中的数据
2022/05/11 MySQL
nginx设置资源请求目录的方式详解
2022/05/30 Servers
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript