É possível passar uma função javascript com parâmetros como parâmetro?
Exemplo:
$(edit_link).click( changeViewMode( myvar ) );
É possível passar uma função javascript com parâmetros como parâmetro?
Exemplo:
$(edit_link).click( changeViewMode( myvar ) );
Respostas:
Use um "fechamento":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Isso cria um invólucro de função temporária anônima que conhece o parâmetro e o passa para a implementação de retorno de chamada real.
this.myFunction = this.myFunction.bind(this)
no seu constructor
método. Mas, como você disse, quando você precisa passar contextos diferentes para cada um deles, como todas as linhas diferentes nas quais você clica para abrir a página de detalhes dessa linha, não é evitável.
Use Function.prototype.bind()
. Citando MDN:
O
bind()
método cria uma nova função que, quando chamada, tem suathis
palavra-chave definida como o valor fornecido, com uma sequência de argumentos fornecida antes de qualquer fornecida quando a nova função é chamada.
É suportado por todos os principais navegadores, incluindo o IE9 +.
Seu código deve ficar assim:
$(edit_link).click(changeViewMode.bind(null, myvar));
Nota lateral: Presumo que você esteja no contexto global, ou seja, this
variável é window
; caso contrário, use em this
vez de null
.
$.ajax(url).done(handler.bind(this, var1, var2));
Sim como isso:
$(edit_link).click(function() { changeViewMode(myvar) });
Ou, se você estiver usando es6, poderá usar uma função de seta
$(edit_link).click(() => changeViewMode(myvar));
Você consegue fazer isso
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
e depois
function activate(callback){
callback && callback();
}
activate(callback);
Ou, se o seu retorno de chamada contiver uma lógica mais flexível, você poderá passar o objeto.
Este é um exemplo da abordagem de Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
Neste exemplo, o "valor do parâmetro" é passado da função1 para a função3 através da função2 usando uma quebra de função.