我很好奇这是否可以在JavaScript中使用。

我想要一个工厂函数,可以返回实际内容不同的函数。说这是我们的工厂:

function makeFunction(a, b, c) {
  // Implement me
  return f;
}


我希望它像这样工作:

> makeFunction(true, true, false);
=> function() { do_a(); do_b(); }
> makeFunction(false, true, false);
=> function() { do_b(); }
> makeFunction(true, false, true);
=> function() { do_a(); do_c(); }


抛开这是否是一个好主意...我可以这样做吗?如果是这样,makeFunction内部需要发生什么?

奖金:通常,这种模式叫什么?



编辑:我应该澄清我不想要的东西:使用闭包的理智的方法。例如。以下内容具有正确的效果,但不会更改功能的内容/主体:

function makeFunction(a, b, c) {
  return function() {
    if (a) { do_a(); }
    if (b) { do_b(); }
    if (c) { do_c(); }
  }
}

最佳答案

是的,这是可能的。不,我不会评论这种方法的(感知)价值。

这是一个快速示例:

window.addEventListener('load', mInit, false);

function createFunction(funcName, message)
{
    var script = document.createElement('script');
    var scriptContents = 'function ' + funcName + '()\n';
    scriptContents += '{\n\talert("' + message + '");\n}\n';
    script.appendChild( newTxt(scriptContents) );
    document.head.appendChild(script);
}

function mInit()
{
    createFunction('myFunc', 'hello world');
    myFunc();
}


输出:

<script>function myFunc()
{
    alert("hello world");
}
</script>


我不确定该功能是否可以立即工作,因此无法进行上述测试。 (确实如此)

过去我有一个想法,涉及在图像的Alpha通道中隐藏脚本...

关于javascript - 建立内容不同的函数的工厂?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18476591/

10-16 13:03