我可以使用父函数的参数来命名其子函数吗?

时间:2019-04-10 16:40:59

标签: javascript jquery parent-child

我有一个带有单个参数的父函数。
我想在几个子函数的命名中使用此参数。
能做到吗?

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 个答案:

答案 0 :(得分:1)

TLDR:重命名功能并不是您真正想要的。

您无需将函数命名为其他名称即可正常工作。那不是应该编程的方式。相反,请尝试概括要执行的操作,以便可以将其应用于所传递的任何内容。例如,如果需要在某些情况下执行其他操作,请向函数添加另一个参数。或者,如果您需要对每个元素进行独特的操作,请使函数以输入/离开回调函数为参数。即使您以编程方式设置了函数名,也很难以任何方式调用它们,因为您不知道它们的名字。

答案 1 :(得分:0)

您可以执行以下操作:

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

functionB()
{
    // Stuff
}

functionC()
{
    // Stuff
}

如果您打算做的是根据参数实际声明一个函数或另一个函数,那么我认为这是不可能的。但是我真的不明白您为什么要这么做,也许如果您在这件事上更加准确,我们可以为您提供更好的帮助。

答案 2 :(得分:0)

您可以这样尝试,也许比传递参数更简单?

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')

答案 3 :(得分:0)

从每个人的反应来看,似乎我的实际问题的答案是否定的。 我将不得不继续思考,并找到另一种方式来简化我的代码。