Подтвердить что ты не робот

Как выполнить метод, переданный как параметр в функцию

Я хочу написать свою собственную функцию в JavaScript, которая принимает метод обратного вызова в качестве параметра и выполняет его после завершения, я не знаю, как вызвать метод в моем методе, который передается в качестве аргумента. Как отражение.

пример кода

function myfunction(param1, callbackfunction)
{
    //do processing here
    //how to invoke callbackfunction at this point?
}

//this is the function call to myfunction
myfunction("hello", function(){
   //call back method implementation here
});
4b9b3361

Ответ 1

Вы можете просто назвать это нормальной функцией:

function myfunction(param1, callbackfunction)
{
    //do processing here
    callbackfunction();
}

Единственная дополнительная вещь - упомянуть контекст. Если вы хотите использовать ключевое слово this в своем обратном вызове, вам придется назначить его. Это часто желательно поведение. Например:

function myfunction(param1, callbackfunction)
{
    //do processing here
    callbackfunction.call(param1);
}

В обратном вызове теперь вы можете получить доступ к param1 как this. См. Function.call.

Ответ 2

Я тоже попал в тот же сценарий, где мне нужно вызвать функцию, отправленную как параметр, в другую функцию.

Я пробовал

mainfunction('callThisFunction');

Первый подход

function mainFuntion(functionName)
{
    functionName();
}

Но заканчивается ошибками. Поэтому я попробовал

Второй подход

functionName.call(). 

По-прежнему бесполезно. Поэтому я попробовал

Третий подход

this[functionName]();

который работал как чемпион. Таким образом, это просто добавить еще один способ вызова. Может быть, могут быть проблемы с моими Первыми и Второстепенными подходами, но вместо этого googling больше и тратить время, я пошел на третий подход.

Ответ 3

function myfunction(param1, callbackfunction)
{
    //do processing here
   callbackfunction(); // or if you want scoped call, callbackfunction.call(scope)
}

Ответ 4

Другой способ - объявить вашу функцию анонимной функцией и сохранить ее в переменной:

var aFunction = function () {
};

После этого вы можете передать aFunction в качестве аргумента myfunction и вызвать его нормально.

function myfunction(callbackfunction) {
    callbackfunction();
}

myfunction(aFunction);

Однако, как указывали другие ответы, необязательно, так как вы можете напрямую использовать имя функции. Я буду держать ответ так, как есть, из-за обсуждения, которое следует в комментариях.

Ответ 5

Я сделаю что-то вроде этого

var callbackfunction = function(param1, param2){
console.log(param1 + ' ' + param2)
}

myfunction = function(_function, _params){
_function(_params['firstParam'], _params['secondParam']);
}

В основной блок кода, возможны параметры прохода

myfunction(callbackfunction, {firstParam: 'hello', secondParam: 'good bye'});

Ответ 6

Все примеры здесь показывают, как объявить это, но не использовать. Я думаю, что и почему у @Kiran было так много проблем.

Трюк заключается в объявлении функции, которая использует обратный вызов:

function doThisFirst(someParameter,  myCallbackFunction) {
    // Do stuff first
    alert('Doing stuff...');

    // Now call the function passed in
    myCallbackFunction(someParameter);
}

Бит someParameter может быть опущен, если не требуется.

Затем вы можете использовать обратный вызов следующим образом:

doThisFirst(1, myOtherFunction1);
doThisFirst(2, myOtherFunction2);

function myOtherFunction1(inputParam) {
    alert('myOtherFunction1: ' + inputParam);
}

function myOtherFunction2(inputParam) {
    alert('myOtherFunction2: ' + inputParam);
}

Обратите внимание, как передается функция обратного вызова и объявлена ​​ без кавычек или скобок.

  • Если вы используете doThisFirst(1, 'myOtherFunction1');, он потерпит неудачу.
  • Если вы используете doThisFirst(1, myOtherFunction3()); (я знаю, что в этом случае нет ввода параметров), тогда он вызовет myOtherFunction3 first, чтобы получить непредвиденные побочные эффекты.

Ответ 7

object[functionName]();

объект: относится к имени объекта.

functionName: - это переменная, значение которой мы будем использовать для вызова функции.

поместив переменную, используемую для обозначения имени функции внутри [] и () вне скобки, мы можем динамически вызвать функцию объекта с помощью переменной. Точечная нотация не работает, потому что она считает, что "functionName" является фактическим именем функции, а не значением, которое имеет "functionName". Это немного сбило меня с ума, пока я не наткнулся на этот сайт. Я рад, что stackoverflow.com существует < 3