Javascript 一般地创建一个新函数

Javascript 一般地创建一个新函数,javascript,function,generics,Javascript,Function,Generics,我不知道这个问题是否正确,但我想知道是否有可能创建通用函数? 让我们说,不要这样做: function f1{ $("#pictureID1").remove(); } 及 JSON 我想像这样自动创建它们: for(var i=1;i<=2;i++{ new function content[i].functionname(){ $("#"+content.image).remove(); } } var func = function() { al

我不知道这个问题是否正确,但我想知道是否有可能创建通用函数? 让我们说,不要这样做:

function f1{
  $("#pictureID1").remove();
}

JSON

我想像这样自动创建它们:

for(var i=1;i<=2;i++{
    new function content[i].functionname(){
       $("#"+content.image).remove();
    }
}
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

for(var i=1;i创建函数工厂:

function factory(name, fn) {
    window[name] = fn
}

for(var i=1;i<=2;i++)
    factory('f'+i, function() { /*...*/ })
功能工厂(名称,fn){
窗口[名称]=fn
}

对于javascript中的(var i=1;i,函数也可以这样声明:

for(var i=1;i<=2;i++{
    new function content[i].functionname(){
       $("#"+content.image).remove();
    }
}
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
因此,您可以创建一个函数数组..如下所示:

for(var i=1;i<=2;i++{
    new function content[i].functionname(){
       $("#"+content.image).remove();
    }
}
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
var arr=[];
for(var i=0;i<2;i++)//javascript中没有“int”-语言不是强类型的
{
var x='hello'+(i+1);
arr.push(函数()
{
警报(x);
});
}
arr[0]();//调用第一个函数

您可以用一种稍微简单一点的方式:

var functions = {}; // this object will store all the generated functions

for(var i=1;i<=2;i++)
    functions['f' + i] = function(){}
var functions={};//此对象将存储所有生成的函数

对于(var i=1;i它实际上非常简单。真正的问题是:为什么?你不应该这样做,因为如果函数是相同的(在你的例子中是相同的),那么你只需要一个函数。只需将“上下文”作为额外参数传递给它。或者,定义一个对象原型并使用实际对象

也就是说,让我们动态地创建一些函数!这将在现实世界中被标记为“wtf you doing,这是非常糟糕的做法”,顺便说一句。不仅是人们,还有像jslint和jshint这样的javascript代码验证器

for(var i=0; i<10; i++) {
  this["f"+i] = function() {
    console.log("lols!");
  };
}

f4(); // says "lols!"
这将是“lol 10”,因为在所有函数绑定之后,变量
i
将是10,然后当您调用
f4()
时,会检查变量,找到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!
如果作为编写源代码的人,您可以编写“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也看不到它有什么不寻常的地方。

您可能想使用
eval(string)
来计算生成的代码字符串。您想用这些函数做什么?可能有比使用eval()更好的选择。你发布的语法显然无效;根据你想用它做什么,可能有一种方法。嘿,伙计们,谢谢你们的回答。我想用一个包含所有信息的JSON动态加载函数:比如:var content={[{“functionName”:“first”,“number”:“2”},{“functionName”:“second”,“number”:“3”};现在我想创建一个函数“first”,并使用数字2作为变量,我想使用变量3创建函数“second”(只是一个示例)你真的想用这个名字调用一个函数吗?因为为了创建函数,它们还需要一个主体。或者你想让函数为空吗?那有什么意义呢?Curry是JavaScript中动态函数的一个很好的例子(不是说OP在寻找咖喱,只是动态函数编程作为一个概念不仅仅是一个WTF)如果你已经知道你在做什么,那么JS几乎什么都不是(这是一个很好的语言)。这个答案主要是根据编程水平定制的,这个问题表示=)大家好,谢谢你们的回答。我想用一个包含所有信息的JSON动态加载函数:比如:var content={[{“functionName”:“first”,“number”:“2”},{“functionName”:“second”,“number”:“3”};现在我想创建一个函数“first”,并使用数字2作为变量,然后创建函数“second”使用变量3(只是一个示例)。我不确定我是否遵循-JSON序列化不包括函数(规范不允许它们)那么你到底在做什么呢,JSON只是你可以通过多种可能的方式获得你想要做的事情所需要的信息的其中一种?是的,JSON应该只提供创建函数的信息(函数名和其他信息,如图像名等)。所以我想先创建一个函数(){/*使用第一个JSON节点的映像名*/},另一个名为second(){/*使用第二个JSON节点的映像名*/}