【发布时间】:2011-04-17 11:42:02
【问题描述】:
【问题讨论】:
标签: javascript node.js chaining floating-action-button
【问题讨论】:
标签: javascript node.js chaining floating-action-button
是纯 JavaScript,它是一个 函数链 模式。
第一行( fab = require("fab") ) 包含fab 函数并返回对它的引用。
后面的括号都是函数调用,每次函数调用都可能一次又一次返回同一个函数。
该模式可能看起来像这个简化的示例:
var foo = function (arg) {
// detect what the argument is
if (typeof arg == 'function') {
// do something with arg
console.log('function: '+arg());
} else if (arg instanceof RegExp) {
// arg is a RegExp...
console.log('A RegExp: '+arg);
} else if (typeof arg == "string") {
// arg is a string
console.log('A string: '+arg);
}
return foo; // return a reference to itself
};
(foo)
(function() { return "Foo "; })
(/bar/)
(" baz!");
输出:
功能:Foo 正则表达式:/bar/ 一个字符串:baz!【讨论】:
这确实很难理解;它看起来根本不像 Javascript...
无论如何,FAB 利用返回指向被调用函数的指针的优势。例如:
function doSomething(str){
alert(str);
return arguments.callee;
}
// Alerts 'hi' and then 'there'
doSomething('hi')('there');
当然你可以实现额外的条件,比如计算参数的数量或者检查传入的参数的类型。例如:
function doSomething(){
if(arguments.length == 1){
alert(arguments[0])
}
else if(arguments.length == 2){
alert(arguments[0] + arguments[1]);
}
return arguments.callee;
}
doSomething
("Hi, 3 + 4 is:")
(3, 4);
最后一个示例警报:
> Hi, 3 + 4 is:
> 7
【讨论】: