John Resig 有一篇关于偏应用的热门博文:http ://ejohn.org/blog/partial-functions-in-javascript/很多地方都提到过,并且有
但是,博客文章中的代码不起作用。这里是:
Function.prototype.partial = function(){
var fn = this, args = Array.prototype.slice.call(arguments);
return function(){
var arg = 0;
for ( var i = 0; i < args.length && arg < arguments.length; i++ )
if ( args[i] === undefined )
args[i] = arguments[arg++];
return fn.apply(this, args);
};
};
var delay = setTimeout.partial(undefined, 10);
delay(function(){
alert( "A call to this function will be temporarily delayed." );
});
现在,如果您尝试在控制台中运行它,它将正常工作。但是,如果您再次尝试使用延迟功能,它将无法正常工作。运行第一段后,尝试在控制台中运行它:
delay(function(){
alert( "This is a test" );
});
请注意,第二条消息不会出现 - 第一条消息会出现。当然,如果你重新制作延迟函数,它会起作用,但你到底为什么要在每次使用它时重新制作部分应用的函数呢?
现在,鉴于这篇博文是“部分应用程序 javascript”的第二个谷歌搜索结果,而且似乎相当流行,我怀疑它完全被破坏了。另一方面,大量的代码示例和流行的 Prototype.js 库函数以我期望的方式 - 可重用的部分应用程序。他的柯里化功能,在页面稍高的地方,完全符合我的预期。因此:
- John Resig 的代码不正确吗?
- 如果不是,为什么他的代码每次要使用它时都强迫你重新制作部分应用的函数?