Можно ли передать функцию 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); }
В этом примере «значение параметра» передается от function1 к function3 через function2 с помощью переноса функции.