所以...在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>
这显然不是一个恶意高效的实例,人们会使用这个概念,所以你能指出我做的事情吗(除了jQuery,请)?
答案 0 :(得分: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();
答案 1 :(得分:8)
Fluent界面 - http://en.wikipedia.org/wiki/Fluent_interface
是的,我认为它可能非常有用,但任何设计模式都应该只在需要时使用
编辑:这是c#中的twitter客户端api,使用流畅的界面 - http://code.google.com/p/tweetsharp/
答案 2 :(得分:8)
对于一个非常不同的(非OO)示例,链接有点类似于Unix pipelines。 Unix管道的每一步都返回完整(修改)的内容,适合发送到下一步:
cat file1 file2 | sort -n | awk '{print $2}' | sed 's/@/ at /g'
答案 3 :(得分:6)
一个有用的示例是您的问题略有不同 - 您可以将对象设计为 immutable ,而不是返回相同的对象。然后你的函数将返回一个相同类型的新实例,但属性已经适当设置。
这有许多实际应用,特别是在函数式编程领域。
答案 4 :(得分:3)
虽然它不能像你的例子一样工作(TBH我以前从未见过这样做过),jquery considers "chaining" to be very useful和jquery现在几乎是JS的标尺网络框架...所以是的: - )
答案 5 :(得分:3)
我在找到这个问题的同时,在定义方法的同时寻找使方法可链接的一般解决方案。这就是我想出来的。我是一名JavaScript初学者;买家要小心。
makeChainable = function() {
var receiver = arguments[0]
for (var i = 1; i < arguments.length; i++) {
functionName = arguments[i];
(function() {
wrapped = receiver[functionName];
receiver[functionName] = function() {
wrapped.apply(receiver, arguments);
return receiver;
}
})();
}
}
daisy = {
name: 'Daisy',
moo: function() { console.log(this.name + " moos!") }
}
makeChainable(daisy, 'moo');
daisy.moo().moo().moo();
答案 6 :(得分:1)
在JavaScript中,这在导航DOM时始终出现。特别是当你试图通过一堆没有id的元素时。
例如,有关finding the first element of a table的SO问题。它可能涉及许多循环或链式命令。
答案 7 :(得分:0)
如果要在单个对象上执行一系列操作,JavaScript链接可能非常有用。我同意下面的Michael Luton,链接应该小心处理。如果将一个或两个链式方法添加到仍可读的对象上。如果您开始添加四个,五个甚至九个,那么您的代码将变得更难以阅读而不是维护。
答案 8 :(得分:-1)
所有的孩子都喜欢链接。但是,根据我的经验,它应该小心使用,因为它会降低代码的可读性。换句话说,做一些对你有意义的事情,并且对其他基本熟悉这个概念的程序员来说很容易理解。