将方法参数/参数传递给方法引用 - bind,anonymous,named

时间:2011-11-09 18:19:59

标签: javascript

我的代码中有多个地方,我使用方法引用(即只有没有参数的方法名称),但我需要传递它的specefic参数。

我不想插入匿名方法b.c.它使代码不可读。

我告诉过我可以使用.bind方法,但我不知道如何正确使用它。有人可以详细说明如何做到这一点。

以下是我需要做的一个例子。

如何使用 bind 将参数添加到ajax_signin?

if(d===0){ajax('arche_model.php',serialize(c)+'&a=signin',ajax_signin,b);}

2 个答案:

答案 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执行函数后将引用的内容。