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)
流畅的界面 - http://en.wikipedia.org/wiki/Fluent_interface
是的,我认为它可能非常有用,但任何设计模式都应该只在需要时使用
编辑:这是使用流畅界面的c#中的twitter客户端api - http://code.google.com/p/tweetsharp/
对于一个非常不同的(非OO)示例,链接有点类似于Unix管道.Unix管道的每一步都返回完整(修改)的内容,适合发送到下一步:
cat file1 file2 | sort -n | awk '{print $2}' | sed 's/@/ at /g'
Run Code Online (Sandbox Code Playgroud)
一个有用的例子就是你的问题略有不同 - 你可以将对象设计成不可变的,而不是返回相同的对象.然后你的函数将返回一个相同类型的新实例,但已经适当地设置了属性.
这有许多实际应用,特别是在函数式编程领域.