能否将带参数的JavaScript函数作为参数传递?
例如:
$(edit_link).click( changeViewMode( myvar ) );
能否将带参数的JavaScript函数作为参数传递?
例如:
$(edit_link).click( changeViewMode( myvar ) );
$(edit_link).click(function(){ return changeViewMode(myvar); });
这将创建一个匿名临时函数包装器,该函数包装器知道参数并将其传递给实际的回调实现。
constructor
方法中使用this.myFunction = this.myFunction.bind(this)
。但正如你所说,当你必须为每个上下文传递不同的参数时,例如单击以打开该行详细信息页面的所有不同行时,这是不可避免的。 - Joshua Pinter使用Function.prototype.bind()
方法。引用 MDN 的说明:
bind()
方法创建一个新的函数,在调用时设置其this
关键字为提供的值,给定一系列参数作为调用新函数时提供的参数之前。
所有主流浏览器都支持此方法,包括 IE9+。
你的代码应该像这样:
$(edit_link).click(changeViewMode.bind(null, myvar));
旁注:我假设您处于全局上下文中,即this
变量是window
;否则请使用null
来代替。
$.ajax(url).done(handler.bind(this, var1, var2));
- Thomasbind
操作比闭包慢? - Michał Perłakowskifn.bind(this)
来解决回调函数中可怕的 this
混淆问题,但是没有理解 bind
的更广泛用途 - 但现在我明白了!谢谢。 - flatpickles不行,但您可以传递一个没有参数的函数,并执行以下操作:
$(edit_link).click(
function() { changeViewMode(myvar); }
);
所以你正在传递一个没有参数的匿名函数,该函数然后使用闭包中的变量调用您的带参数函数。
或者如果你正在使用es6,则应该能够使用箭头函数
$(edit_link).click(() => changeViewMode(myvar));
$(edit_link).click(function() { changeViewMode(myvar) });
你可以做到这一点
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
然后
function activate(callback){
callback && callback();
}
activate(callback);
如果您的回调函数包含更灵活的逻辑,可以传递对象。
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }