Ist es möglich, eine Javascript-Funktion mit Parametern als Parameter zu übergeben?
Beispiel:
$(edit_link).click( changeViewMode( myvar ) );
Ist es möglich, eine Javascript-Funktion mit Parametern als Parameter zu übergeben?
Beispiel:
$(edit_link).click( changeViewMode( myvar ) );
Antworten:
Verwenden Sie einen "Verschluss":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Dadurch wird ein anonymer temporärer Funktions-Wrapper erstellt, der den Parameter kennt und an die eigentliche Callback-Implementierung übergibt.
this.myFunction = this.myFunction.bind(this)in Ihrer constructorMethode verwenden. Wie Sie bereits sagten, ist es jedoch nicht vermeidbar, wenn Sie für jede Zeile unterschiedliche Kontexte übergeben müssen, z. B. alle unterschiedlichen Zeilen, auf die Sie klicken, um die Detailseite dieser Zeile zu öffnen.
Verwenden Function.prototype.bind() . MDN zitieren:
Das
bind()Methode erstellt eine neue Funktion, derenthisSchlüsselwort beim Aufruf auf den angegebenen Wert gesetzt wird, wobei eine bestimmte Folge von Argumenten vor allen beim Aufruf der neuen Funktion angegebenen Argumenten steht.
Es wird von allen gängigen Browsern unterstützt, einschließlich IE9 +.
Ihr Code sollte folgendermaßen aussehen:
$(edit_link).click(changeViewMode.bind(null, myvar));
Randnotiz: Ich gehe davon aus, dass Sie sich im globalen Kontext befinden, dh thisVariable ist window; andernfalls thisanstelle von verwenden null.
$.ajax(url).done(handler.bind(this, var1, var2));
Ja genau so:
$(edit_link).click(function() { changeViewMode(myvar) });
Oder wenn Sie es6 verwenden, sollten Sie in der Lage sein, eine Pfeilfunktion zu verwenden
$(edit_link).click(() => changeViewMode(myvar));
Du kannst das
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
und dann
function activate(callback){
callback && callback();
}
activate(callback);
Wenn Ihr Rückruf eine flexiblere Logik enthält, können Sie ein Objekt übergeben.
Dies ist ein Beispiel nach dem Ansatz von Ferdinand Beyer:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
In diesem Beispiel wird der "Parameterwert" mithilfe eines Funktionsumbruchs von Funktion1 zu Funktion3 über Funktion2 übergeben.