使用字符串变量的值调用Javascript函数的方法?

时间:2009-07-17 16:17:28

标签: javascript function

我已经看到这种技术可以根据字符串变量的值来调用Javascript函数。

function foo() {
    alert('foo');
}

var test = 'foo';

window[test]();  //This calls foo()

这是接受的方式吗?还是有更好的方法?是否需要担心任何跨浏览器问题?

5 个答案:

答案 0 :(得分:31)

对我来说很好看。我可能会创建一个简单的帮助函数,如下所示:

function runFunction(name, arguments)
{
    var fn = window[name];
    if(typeof fn !== 'function')
        return;

    fn.apply(window, arguments);
}

//If you have following function

function foo(msg)
{
    alert(msg);
}

//You can call it like

runFunction('foo', ['test']); //alerts test.

答案 1 :(得分:6)

即使使用辅助功能,我个人也不会打扰

  window[someKey]('test')

没关系。

但是,无论如何,我都不会维持一组可能的函数来调用全局范围。因此,我会使用更一般的模式: -

 obj[someKey]('test')

其中obj可以是this,来自闭包的此属性或变量。

答案 2 :(得分:1)

您可以像这样简单地使用它......(当然,在需要的地方用变量替换字符串)

document["getElementById"]("elementName")["style"]["border"] = "1PX SOLID GREEN";

当然也很容易/通常打字......

document.getElementById("elementName").style.border = "1PX SOLID GREEN";

这是另一个多维的例子......

var myObject = new Object();
myObject["myValue"]["one"] = "first value";
myObject["myValue"]["two"] = "second value";
alert(myObject["myValue"]["two"]); //outputs "second value"

也可以写成......

var myObject = new Object();
myObject["myValue"] = {one: "first value", two: "second value"};
alert(myObject["myValue"]["two"]); //outputs "second value"

答案 3 :(得分:0)

您可以使用eval(str)

eval('foo();');

非常谨慎地使用它。

答案 4 :(得分:0)

我创建了一个调用命名函数的函数。它适用于浏览器和Node.js.我创建了一个要点(https://gist.github.com/netsi1964/3f19bd96f2d6e18bd818),其中还包含一个小测试。该函数的指纹是:callFunction(scope, fn, args)。 它将函数中的范围设置为指定的范围,默认为window(在浏览器中)和global(在Node.js中)。 要回答您的原始请求,您可以像这样使用它: callFunction(window, "foo",["test"])