Чи можна передавати функцію javascript з параметрами як параметр?
Приклад:
$(edit_link).click( changeViewMode( myvar ) );
Чи можна передавати функцію javascript з параметрами як параметр?
Приклад:
$(edit_link).click( changeViewMode( myvar ) );
Відповіді:
Використовуйте "закриття":
$(edit_link).click(function(){ return changeViewMode(myvar); });
Це створює анонімну обгортку тимчасової функції, яка знає про параметр і передає його фактичній реалізації зворотного виклику.
this.myFunction = this.myFunction.bind(this)у своєму constructorметоді. Але, як ви сказали, коли вам доведеться передавати йому різні контексти для кожного з них, як і всі різні рядки, на які натискаєте, щоб відкрити сторінку деталей цього рядка, цього не уникнути.
Використовуйте Function.prototype.bind(). Цитування MDN:
bind()Метод створює нову функцію , яка при виклику, має свійthisнабір ключових наданим значення із заданою послідовності аргументів , що передують будь при умови , коли нова функція викликається.
Його підтримують усі основні браузери, включаючи IE9 +.
Ваш код повинен виглядати так:
$(edit_link).click(changeViewMode.bind(null, myvar));
Бічна примітка: я припускаю, що ви перебуваєте в глобальному контексті, тобто thisзмінна є window; в іншому випадку використовувати thisзамість null.
$.ajax(url).done(handler.bind(this, var1, var2));
Так, ось так:
$(edit_link).click(function() { changeViewMode(myvar) });
Або якщо ви використовуєте es6, ви повинні мати можливість використовувати функцію стрілки
$(edit_link).click(() => 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); }
У цьому прикладі "значення параметра" передається від функції1 до функції3 через функцію2 за допомогою обгортки функції.