javascript - 构建内容不同的函数的工厂?

标签 javascript function factory

我很好奇这在 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(); }
  }
}

最佳答案

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

这是一个快速示例:

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 channel 中隐藏脚本......

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

相关文章:

javascript - 如何在 React 中测试类组件

JavaScript indexOf 忽略大小写

algorithm - 如何使用 GCD 方法查找多个数字的 lcm?

c# - autofac/c#: A generic factory for a specific base class?

javascript - 使用 angularjs 提交 symfony2 表单

javascript - 无法从异步 Promise 执行器函数中抛出错误

php - 在函数中返回 parent::function

c - 如何编写 Makefile 以从一个源生成两个可执行文件?

python - 运行 `python -m unittest` 会更改在回溯中打印覆盖 `__name__` 的异常的方式

c++ - 如何实现一个支持模板协变的泛型工厂?