Могу ли я использовать параметр родительской функции для именования ее дочерней функции? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть родительская функция с одним параметром.
Я хочу использовать этот параметр в именовании пары дочерних функций.
Можно ли это сделать?

function A(red) {
    function redBall() {
        stuff
    }
    function redHat() {
        stuff
    }
}

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

function name(parameter) {

    let parameterThis = '"' + parameter + 'This"';
    let parameterThat = '"' + parameter + 'That"';
    let $button = '$(".button.' + parameter + '")';

    function parameterEnter() {
        document.getElementById(parameterThis).style.opacity = "1";
        document.getElementById(parameterThat).style.display = "block";
    }

    function parameterLeave() {
        document.getElementById(parameterThis).style.opacity = "0";
        document.getElementById(parameterThat).style.display = "none";
    }

    $button.hover(parameterEnter,parameterLeave);
}

Ответы [ 4 ]

1 голос
/ 10 апреля 2019

TLDR: переименование функций - это не то, что вам действительно нужно.

Вам не нужно заставлять свои функции называться по-другому, чтобы это работало. Это не то, как программирование должно работать. Вместо этого попытайтесь обобщить то, что вы пытаетесь сделать, чтобы его можно было применить ко всему, что вы передаете. Например, если вам нужно, чтобы он делал разные вещи в определенных случаях, добавьте еще один параметр в функцию. Или, если вам нужно, чтобы с каждым элементом происходили уникальные вещи, сделайте так, чтобы ваша функция принимала функции обратного вызова ввода / вывода в качестве аргументов. Даже если вы программно установили имена функций, вам все равно будет сложно их вызывать, потому что вы не знаете, как они называются.

0 голосов
/ 12 апреля 2019

Кажется, что ответ на мой настоящий вопрос - нет, судя по тому, как все ответили. Мне придется продолжать думать об этом и найти другой способ упростить мой код.

0 голосов
/ 10 апреля 2019

Вы можете попробовать вот так, может быть, проще, чем передавать аргументы?

var foo = function() {
    this.a = function () {
        console.log('A function');
    }

    this.b = function() {
        console.log('B function');
    }
    return this;
}

Затем вызвать нужную функцию, например,

foo().a();

РЕДАКТИРОВАТЬ: Я неправильно понял ваш код. Если я правильно теперь понимаю, вы хотите передать только строку, а затем немедленно вызвать функцию с таким именем?Ну, вы можете сделать это, используя eval(), но многие люди советуют избегать его использования, где бы он ни находился:

function foo(whatFunction) {
    function a() {
        console.log('a function');
    }

    function b() {
        console.log('b function')
    }
    eval(whatFunction)();
}

Так что тогда назовите его foo('b'), например

0 голосов
/ 10 апреля 2019

Вы можете сделать что-то вроде этого:

functionA (boolean condition)
{
    if (condition)
         fonctionB();
    else
         fonctionC();
}

functionB()
{
    // Stuff
}

functionC()
{
    // Stuff
}

Если то, что вы намереваетесь сделать, это фактически объявить функцию или другую в зависимости от параметра, я не думаю, что это возможно. Но я не совсем понимаю, почему вы хотели бы сделать это, и, возможно, мы могли бы помочь вам лучше, если бы вы были более точны в этом вопросе.

...