Czy można przekazać funkcję javascript z parametrami jako parametrem?
Przykład:
$(edit_link).click( changeViewMode( myvar ) );
Czy można przekazać funkcję javascript z parametrami jako parametrem?
Przykład:
$(edit_link).click( changeViewMode( myvar ) );
Odpowiedzi:
Użyj „zamknięcia”:
$(edit_link).click(function(){ return changeViewMode(myvar); });
Tworzy to anonimowe opakowanie funkcji tymczasowej, które wie o parametrze i przekazuje go do rzeczywistej implementacji wywołania zwrotnego.
this.myFunction = this.myFunction.bind(this)w swojej constructormetodzie. Ale, jak powiedziałeś, kiedy musisz przekazać do niego różne konteksty dla każdego z nich, na przykład wszystkie różne wiersze, które klikasz, aby otworzyć stronę szczegółów tego wiersza, nie można tego uniknąć.
Użyj Function.prototype.bind(). Cytując MDN:
bind()Metoda tworzy nową funkcję, która, kiedy nazywa, ma swójthiszestaw słów kluczowych do podanej wartości z danej sekwencji argumentów poprzedzających każdy pod warunkiem, że nowa funkcja jest wywoływana.
Jest obsługiwany przez wszystkie główne przeglądarki, w tym IE9 +.
Twój kod powinien wyglądać następująco:
$(edit_link).click(changeViewMode.bind(null, myvar));
Uwaga dodatkowa: zakładam, że jesteś w kontekście globalnym, tj. thisZmienna jest window; w przeciwnym razie użyj thiszamiast null.
$.ajax(url).done(handler.bind(this, var1, var2));
Tak, tak:
$(edit_link).click(function() { changeViewMode(myvar) });
Lub jeśli używasz es6, powinieneś być w stanie użyć funkcji strzałki
$(edit_link).click(() => changeViewMode(myvar));
Możesz to zrobić
var message = 'Hello World';
var callback = function(){
alert(this)
}.bind(message);
i wtedy
function activate(callback){
callback && callback();
}
activate(callback);
Lub jeśli twój callback zawiera bardziej elastyczną logikę, możesz przekazać obiekt.
Oto przykład zgodny z podejściem Ferdinanda Beyera:
function function1()
{
function2(function () { function3("parameter value"); });
}
function function2(functionToBindOnClick)
{
$(".myButton").click(functionToBindOnClick);
}
function function3(message) { alert(message); }
W tym przykładzie „wartość parametru” jest przekazywana z funkcji 1 do funkcji 3 poprzez funkcję 2 przy użyciu zawijania funkcji.