JavaScript对象方法链接:有用吗?

Hex*_*ory 18 javascript object method-chaining

所以...在JavaScript中乱搞一个对我来说很新的想法,让Object的方法返回它们是方法的Object; 这导致了可链接性.我的问题是:这怎么有用?我把它扔在一起测试基本工作:

<script>
MathChain = function()
 {
    this.pass = function()
     {
        this.multiply = eval(arguments.join('*'));
        this.add = eval(arguments.join('+'));
        return this;
     }
 }

m = new MathChain().pass(5, 10, 20).multiply; // 1000
a = new MathChain().pass(5, 10, 20).add;      // 35
</script>
Run Code Online (Sandbox Code Playgroud)

这显然不是一个恶意高效的实例,人们会使用这个概念,所以你能指出我做的事情吗(除了jQuery,请)?

jon*_*ohn 25

嗯,这是一个不太现实的适用例子,但我想你会明白这个想法.如果允许您对对象执行许多不同的操作,并提供方便.

var truck = function() {

    this.turnLeft = function {

       // turn left
       return this;

    }

    this.turnRight = function {

       // turn right
       return this;

    }

    this.goReallyFast = function {

       // go fast!
       return this;

    }

};

// My get-away plan
var myTruck = new truck();
myTruck.turnLeft().turnRight().goReallyFast();
Run Code Online (Sandbox Code Playgroud)


dfa*_*lhf 8

流畅的界面 - http://en.wikipedia.org/wiki/Fluent_interface

是的,我认为它可能非常有用,但任何设计模式都应该只在需要时使用

编辑:这是使用流畅界面的c#中的twitter客户端api - http://code.google.com/p/tweetsharp/


Ani*_*van 8

对于一个非常不同的(非OO)示例,链接有点类似于Unix管道.Unix管道的每一步都返回完整(修改)的内容,适合发送到下一步:

cat file1 file2 | sort -n | awk '{print $2}' | sed 's/@/ at /g'
Run Code Online (Sandbox Code Playgroud)


Joe*_*orn 6

一个有用的例子就是你的问题略有不同 - 你可以将对象设计成不可变的,而不是返回相同的对象.然后你的函数将返回一个相同类型的新实例,但已经适当地设置了属性.

这有许多实际应用,特别是在函数式编程领域.