我不知道问题是否正确,但我想知道是否可以通用地创建函数? 让我们说而不是这样做:
function f1{
$("#pictureID1").remove();
}
和
function f2{
$("#pictureID2").remove();
}
JSON
var content = [
{"functionname": "f1", "image": "pictureID1"},
{"functionname": "f2", "image": "pictureID2"},
];
我想像这样自动创建它们:
for(var i=1;i<=2;i++{
new function content[i].functionname(){
$("#"+content.image).remove();
}
}
提前致谢,
马克
答案 0 :(得分:1)
创建一个函数工厂:
function factory(name, fn) {
window[name] = fn
}
for(var i=1;i<=2;i++)
factory('f'+i, function() { /*...*/ })
答案 1 :(得分:0)
在javascript中,函数也可以这样声明:
var func = function() { alert('hello'); }
func(); // call the function
所以你可以创建一系列函数......就像这样:
var arr = [];
for(var i = 0; i < 2; i++) // there is no 'int' in javascript - the language is NOT strongly-typed
{
var x = 'hello ' + (i + 1);
arr.push(function()
{
alert(x);
});
}
arr[0](); // call the first function
答案 2 :(得分:0)
你可以稍微简单一点地做到这一点:
var functions = {}; // this object will store all the generated functions
for(var i=1;i<=2;i++)
functions['f' + i] = function(){}
然后您可以访问生成的函数,例如functions.f1()
基本上它就像David所说的那样,只有他使用全局window
对象而我正在使用我自己创建的对象,而不是污染全局对象并可能暴露于冲突。 / p>
答案 3 :(得分:0)
那就是说,让我们动态制作一些功能!在现实世界中,这将被标记为“你正在做什么,这是非常糟糕的做法”,顺便说一下。不仅仅是人,还有jslint和jshint等javascript代码验证器。
for(var i=0; i<10; i++) {
this["f"+i] = function() {
console.log("lols!");
};
}
f4(); // says "lols!"
如果你希望那个i
工作,那么你点击“你在做什么,这都是错的”,因为你可能想要这样做:
for(var i=0; i<10; i++) {
this["f"+i] = function() {
console.log("lol "+i+"!");
};
}
f4(); // says "lol 10!" ... wait what?
这就是说“lol 10”,因为变量i
在所有函数绑定后都是10,然后当你调用f4()
时,var被检查,10是发现,它说“10”。不那么方便。
for(var i=0; i<10; i++) {
this["f"+i] = (function(v) {
return function() {
console.log("lol "+v+"!");
};
}(i));
}
f4(); // says "lol 4!", sweet!
现在它会说正确的事情,但我们已经正确地击中了“你正在做什么”的糟糕编码水平。这绝对没有意义,真正的问题是我们需要这些功能。实际上,这种方法并不比解决问题的“真实”方法更好。例如,您需要生成特定数字重要的函数输出吗?好的,我们这样做:
function pipenum(i) {
console.log("lol "+i+"!");
}
pipenum(4); // says "lol 4!". Obviously.
如果您作为人类编写源代码,可以编写“f4()”,那么您也可以编写“pipenum(4)”。你基本上只是移动了(,这甚至不是努力。它和动态代码一样容易使用:
var arg = 4; // obtained from user, or file, or whatever
this["f" + arg](...);
很奇怪,需要奇怪的功能设置,而:
var arg = 4; // still obtained from user, or file, or whatever
this.pipenum(arg);
是普通的常规JS。没有人会盯着它,jslint / jshint也不会看到任何与众不同的东西。