Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用字符串变量的值调用Javascript函数?_Javascript_Function - Fatal编程技术网

如何使用字符串变量的值调用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) {

我见过这种基于字符串变量值调用Javascript函数的技术

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"