如何使用字符串变量的值调用Javascript函数?
我见过这种基于字符串变量值调用Javascript函数的技术如何使用字符串变量的值调用Javascript函数?,javascript,function,Javascript,Function,我见过这种基于字符串变量值调用Javascript函数的技术 function foo() { alert('foo'); } var test = 'foo'; window[test](); //This calls foo() 这是公认的方法还是有更好的方法?需要担心的跨浏览器问题?您可以使用eval(str) 使用时要格外小心。在我看来很好。我可能会创建一个简单的助手函数,如下所示: function runFunction(name, arguments) {
function foo() {
alert('foo');
}
var test = 'foo';
window[test](); //This calls foo()
这是公认的方法还是有更好的方法?需要担心的跨浏览器问题?您可以使用eval(str)
使用时要格外小心。在我看来很好。我可能会创建一个简单的助手函数,如下所示:
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.
就我个人而言,我甚至不会为助手函数而烦恼
window[someKey]('test')
好的
然而,无论如何,我不会在全局范围内维护一组可能调用的函数。因此,我将使用更一般的模式:-
obj[someKey]('test')
其中obj可能是this,this的属性或闭包中的变量。您可以这样简单地使用它。。。(当然,如果需要,可以用变量替换字符串) 这也很容易/通常像这样打字当然
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"
我创建了一个函数来调用命名函数。它可以在浏览器和Node.js中工作。我创建了一个gist(),其中还包含一个小测试。函数的指纹是:
callFunction(scope、fn、args)
。
它将函数中的范围设置为指定的范围,并默认为窗口(在浏览器中)和全局(在Node.js中)。
要回答您最初的请求,您可以这样使用它:
调用函数(窗口,“foo”和[“test”])
-1。这里不需要使用eval。我理解错问题了吗?为什么eval是错误的?使用eval调用Javascript解析器,天知道还需要什么来获取文本并将其转换为一组可以执行的指令。window['foo']()可以工作,所以在这种情况下应该避免使用eval一般来说,应该避免使用eval,因为它启动JS解释器来执行指定给eval的代码。此外,如果用户在字符串变量中有函数名,则希望执行该函数。你的代码并没有做到这一点。JavaScript中不赞成使用eval是有充分理由的。但这也是问题的一个有效答案。+1,比我快,而且有更好的调用函数。回答得好。我认为有一个助手来做一些健全性检查是一个好主意。你会多久调用一个在全局范围内声明的函数并给它一个非null的上下文?(顺便说一句,我认为你使用scope这个词有误导性,上下文会更好)我想了很久,你是对的,不会出现我需要将scope传递给全局函数,修改代码的情况。很棒的函数!。我修改了行(供我使用)以具有“return fn.apply(window,arguments)”,这样我也可以得到一个return。
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"