我的代码中有多个地方,我使用方法引用(即只有没有参数的方法名称),但我需要传递它的specefic参数。
我不想插入匿名方法b.c.它使代码不可读。
我告诉过我可以使用.bind方法,但我不知道如何正确使用它。有人可以详细说明如何做到这一点。
以下是我需要做的一个例子。
如何使用 bind 将参数添加到ajax_signin?
if(d===0){ajax('arche_model.php',serialize(c)+'&a=signin',ajax_signin,b);}
答案 0 :(得分:1)
如果希望使用参数调用ajax_signin()
,则必须创建一个单独的函数,您可以将该函数传递给使用适当参数调用ajax_signin()
的ajax。有几种方法可以做到这一点:
使用匿名函数:
if(d===0){ajax('arche_model.php',serialize(c)+'&a=signin',function() {ajax_signin("parm1","parm2")},b);}
创建自己的命名函数:
function mySignIn() {
ajax_signin("parm1","parm2");
}
if(d===0){ajax('arche_model.php',serialize(c)+'&a=signin',mySignIn,b);}
如果您想使用.bind()
,并且您确定自己只在支持.bind()的浏览器中运行,或者您有一个垫片让.bind()
始终有效,那么您可以执行类似的操作这样:
if(d===0){ajax('arche_model.php',serialize(c)+'&a=signin',ajax_signin.bind(this, "parm1","parm2"),b);}
.bind()调用会创建一个始终具有特定this
ptr的新函数,并且始终具有"parm1"
和"parm2"
作为前两个参数。
答案 1 :(得分:0)
你应该使用部分功能应用程序! IE:以下内容:
// This will call a function using a reference with predefined arguments.
function partial(func, context /*, 0..n args */) {
var args = Array.prototype.slice.call(arguments, 2);
return function() {
var allArguments = args.concat(Array.prototype.slice.call(arguments));
return func.apply(context ? context : this, allArguments);
};
}
第一个参数是您要调用的函数,第二个参数是上下文,之后的任何参数将被“预加载”到函数调用中。
注意:'Context'是this
执行函数后将引用的内容。