我试图找出是否存在使用部分函数应用程序/绑定的概念或现有的正式名称。
我在不同名称的多个地方/图书馆看过它,但这里或多或少是我正在讨论的概念与正常的咖喱/绑定/部分功能应用程序:
//Typical usage of bind/curry:
fn = bind(function(){console.log(this, arguments)}, context, 'arg 1', 'arg 2');
fn('arg 3'); //logs out arg 1, arg 2, and arg 3
//What I'm looking for:
fn = makeFn(function(){console.log(this, arguments)}, context, 'arg 1', 'arg 2');
fn('arg 3'); //logs out arg 1, arg 2
// (Notice that arg 3 is ignored because it's not in the defined list of arguments).
此类用例的示例用例:
obj = {
toggle: function(force, config){
node[force || this.hidden ? 'show' : 'hide'](config && config.someSetting);
this.hidden = !this.hidden;
},
hidden: false
}
node.on('click', makeFn(obj.toggle, obj, true));
(使用bind / curry传递事件对象或发送的其他任何参数,但我们定义的函数会尝试选择将其用作完全不同类型的参数)。
我已经看到这种模式在不同的库中称为多个东西,但语法/能力略有不同。
Facebook的js使用Function.prototype.shield(context,[args ...]),Mootools使用Function.prototype.pass(args,[context]),Sencha(néeExtJS)使用Function.prototype.createDelegate(fn) ,args,[appendArgs = false])我甚至看到一些叫做partial(fn,context,args)(但是部分通常有额外的能力传递占位符以允许传递不同的默认参数;我是避免这种情况,因为在每次函数调用时循环遍历参数列表的性能开销。)
这是一个正式的概念,还是只是一个需要一些新名称的隐含概念?
提前致谢:)