我已经看到这种技术可以根据字符串变量的值来调用Javascript函数。
function foo() {
alert('foo');
}
var test = 'foo';
window[test](); //This calls foo()
这是接受的方式吗?还是有更好的方法?是否需要担心任何跨浏览器问题?
答案 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"])