Javascript 将方法参数/参数传递给方法引用-绑定、匿名、命名

Javascript 将方法参数/参数传递给方法引用-绑定、匿名、命名,javascript,Javascript,我在代码中有多个地方使用方法引用(即只使用没有参数的方法名),但我需要将specefic参数传递给它 我不想插入匿名方法b.c。这会使代码无法读取 我已经告诉过我可以使用.bind方法,但我不知道如何正确使用它。有人能详细说明一下如何做到这一点吗 这里有一个例子,说明我需要做的 如何使用bind将参数添加到ajax\u signin if(d===0){ajax('arche_model.php',serialize(c)+'&a=signin',ajax_signin,b);} 如果

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

我不想插入匿名方法b.c。这会使代码无法读取

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

这里有一个例子,说明我需要做的

如何使用bind将参数添加到ajax\u signin

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

如果您希望使用参数调用
ajax\u-sign()
,那么必须创建一个单独的函数,您可以将该函数传递给ajax,该函数使用适当的参数调用
ajax\u-sign()
。有几种方法可以做到这一点:

使用匿名函数:

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);}
创建自己的命名函数:

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”
作为前两个参数。

您应该使用部分函数应用程序!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'是执行函数后本将引用的内容。

您想在此处缩小哪个方法?您想使用.bind吗?或者不想使用匿名方法?我想在这个实例中使用bind向ajax添加参数\u signal是否将方法名称作为字符串传递?或者你正在传递方法本身?你读过MDN上关于绑定的教程吗?他们有很多例子,但是应该有一种方法来使用bind?这不是一个好的答案,有一个通用的答案,使用部分函数应用程序,每次手动这样做都会过时。我在答案中添加了一个
.bind()
选项,虽然我不确定在这种情况下它如何比匿名函数选项更好,
.bind()
有浏览器兼容性问题,您必须计划解决这些问题。@GregAgnew-如果您想在多个地方反复发送相同的参数,只需创建一个命名函数并在任何地方使用即可
.bind()
是一款新产品,并没有得到普遍支持,而且它似乎并没有为此节省太多。您的
部分
解决方案似乎并不简单。我不认为这比创建命名函数或匿名函数更简单。OP现在可以从提供的三种不同的解决方案中进行选择。@jfriend00.bind仅在较新的浏览器中受支持。apply早就受支持了。然而,更大的区别是partial允许您以优雅的方式将上下文应用于函数。实现这一点的唯一方法是function(){ajax_sign.apply(上下文,“parm1”、“parm2”);这和
.bind()
的功能类似。我看不出它比匿名函数声明更简单或更有效,匿名函数声明是Javascript开发中一个久经考验的主题,或者比
.bind()
做得更好。我不是说它不起作用-我只是不明白为什么它更好?这是一个偏好的问题..我想..+我只是想更好地了解它,因为旧浏览器不支持绑定。它来自javascript 1.8.5,其中as apply可以追溯到1.3