我很好奇这在 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/