передача функции в качестве аргумента, если вы еще не знаете имя функции

1

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

 Tournament.prototype.projectedLeaderboard= function(projectScoreByXXX){

    for(var i =0; i<jsonObj.tournament.players.length; i++){


        jsonObj.tournament.players[i].score = projectScoreByXXX(jsonObj.tournament.players[i].lastname, jsonObj.tournament.players[i].firstinitial);

    }
    leaderboard();

}

}

благодарю вас

когда пользователь хочет вызвать функцию, он будет использовать t.projectedLeaderboard(projectScoreByHole); или t.projectedLeaderboard(projectScoreByIndividual);

projectScoreByIndividual и projectScoreByHole - это две функции, которые у меня есть в моем классе. ProjectCcoreByXXX - это не имя функции, и я помещаю ее туда как имя аргумента, потому что я не знаю, какой пользователь будет использовать. По отдельности или дыре есть ли способ сделать это?

  • 1
    Я не понимаю проблемы. Почему вы не можете просто сделать projectScoreByXXX(jsonObj..., jsonObj...) . Вам не нужно bind или this .
  • 0
    Что вы ожидаете от этого и почему, по вашему мнению, оно имеет свойство projectScoreByXXX ?
Теги:

1 ответ

3

Вы должны вызвать функцию напрямую, вот пример, чтобы проиллюстрировать:

function caller(func, params) { // in your case: projectedLeaderboard, and you're not
                                // using params since like you said
                                // they would have the same arguments
  func(params); // in your case: projectScoreByXXX(jsonObj...., jsonObj...)
}
function f(n) {
  console.log(n**2);
}
function g(n) {
  console.log(Math.sqrt(n));
}
caller(f, 4);
caller(g, 4);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню