现在的位置: 首页 > 综合 > 正文

JavaScript学习笔记(二十八) 链式模式

2013年12月11日 ⁄ 综合 ⁄ 共 897字 ⁄ 字号 评论关闭

链式模式(Chaining Pattern)

链式模式可以让你调用一个对象的方法一个接着一个,不需要将前一个操作的返回值赋值给变量并且也不需要将你的调用分成多行:
myobj.method1("hello").method2().method3("world").method4();

当你创建的方法没有有意义的返回值时,你可以让它们返回this——它们正在工作的对象的实例。

这能够让这个对象的使用者在前一个方法后面调用后一个方法:
var obj = {
    value: 1,
    increment: function () {
        this.value += 1;
        return this;
    },
    add: function (v) {
        this.value += v;
        return this;
    },
    shout: function () {
        alert(this.value);
    }
};
// chain method calls
obj.increment().add(3).shout(); // 5
// as opposed to calling them one by one
obj.increment();
obj.add(3);
obj.shout(); // 5

链式模式的优缺点(Pros and Cons of the Chaining Pattern)

使用链式模式的一个好处就是节省一些输入和创造出更加简洁的代码,读起来就像一条语句。

另一个的好处它会帮助你思考分割你的函数并且创建更小的的函数,更多专一的函数(specialized functions),与此相反就是函数试着做很多事情。这在长远考虑可以提高维护性。

一个缺点就是这会让代码很难调试,你可以知道一个错误发生在具体哪一行,但在这一行发生了太多事;
当你链式调用的这些方法中有一个悄悄的失败了,你没有办法知道是哪一个。

无论如何,知道这个模式是好的,并且当你写一个方法没有有意义的返回值,你就可以返回this
这种模式被广泛使用,比如,在jQuery库中。并且如果你看一下DOM API,你会发现它也有链式设计的倾向,比如:
document.getElementsByTagName('head')[0].appendChild(newnode);






抱歉!评论已关闭.