Javascript - 使用变量名创建函数

时间:2016-09-19 09:44:15

标签: javascript

我正在尝试基于变量名创建一些函数,类似于:

var functionsToRegister = ["foo","bar"];

var index;
for (index = 0; index < functionsToRegister.length; ++index) {
    var function_name = functionsToRegister[index];

    PART_IM_MISSING = new Function('return alert("hello, world!");');
}

客户端代码调用特定方法,例如它将调用foo()

请注意,我不是在网站上工作,而是在本机Windows应用程序(SoftOne)上工作,该应用程序允许通过javascript引擎进行一些自定义选项。

此外,绝对无法更改调用函数的客户端代码。

3 个答案:

答案 0 :(得分:7)

您可以使用窗口对象来创建全局函数。

var functionsToRegister = ["foo", "bar"],
    index,
    function_name;

for (index = 0; index < functionsToRegister.length; ++index) {
    function_name = functionsToRegister[index];
    window[function_name] = new Function('return alert("hello, world!");');
}

foo();

答案 1 :(得分:1)

var functionsToRegister = ["foo","bar"];

var index;
for (index = 0; index < functionsToRegister.length; ++index) {
    var function_name = functionsToRegister[index];

    this[function_name]=function() {
        return alert("hello, world!");
    }
}

这会将函数foo和bar添加到此对象(或者您可以使用任何对象,如window),

但我猜你不想要n个相同的功能..所以也许吧:

var functionsToRegister = {
    'foo':function() {return alert("hello, foo!");},
    "bar":function() {return alert("hello, bar!");},
};


var index;
for (index in functionsToRegister) if(functionsToRegister.hasOwnProperty(index)) {
    var function_name = index;
    var function_code = functionsToRegister[index];


    this[function_name]=function_code;
}


this['foo']();
this.bar();

foo();

答案 2 :(得分:0)

您可以使用eval。

    Dim regex As New System.Text.RegularExpressions.Regex("No")
    For Each match As RegularExpressions.Match In regex.Matches(str)
        Console.WriteLine("Match found @ {0}", match.Index)
    Next