调用一个名为variables的JavaScript函数

我有一个JavaScriptvariables,其中包含一个JavaScript函数的名称。 这个函数在页面上已经被加载并使用$ .ajax等来存放

任何人都可以告诉我,我将如何调用在variables中命名的JavaScript函数?

该函数的名称是在一个variables中,因为用于加载页面片段(被插入到当前页面)的URL包含要调用的函数的名称。

我接受其他关于如何实施这个解决scheme的build议。

我会避免评估。

要解决这个问题,你应该知道关于JavaScript的这些东西。

  1. 函数是第一类对象,所以它们可以是对象的属性(在这种情况下称为方法 ),甚至可以是数组的元素。
  2. 如果不select函数所属的对象,则属于全局范围。 在浏览器中,这意味着你把它挂在名为“window”的对象上,而这个对象是全局variables存在的地方。
  3. 数组和对象密切相关。 (谣言是他们甚至可能是乱伦的结果!)你经常可以用点替代. 而不是方括号[] ,反之亦然。

你的问题是考虑参考点方式而不是方括号方式的结果。

那么,为什么不喜欢,

 window["functionName"](); 

这是假设你的function生活在全球空间。 如果你有命名空间,那么:

 myNameSpace["functionName"](); 

避免使用eval,并避免将string传入setTimeout和setInterval。 我写了很多的JS,我从来不需要评估。 “需要”的评价来源于不够深入的语言。 您需要了解范围,上下文和语法。 如果你一直坚持评估,只要问一下 – 你会很快学会。

如果它在全球范围内,最好使用:

 function foo() { alert('foo'); } var a = 'foo'; window[a](); 

eval() 。 因为eval()是evaaaaaal 。

正如诺斯瑞娜在我之前40秒所说的那样

绝对避免使用eval来做这样的事情,否则你会打开自己的XSS(跨站点脚本)漏洞。

例如,如果您要使用这里提出的eval解决scheme,恶意用户可以发送链接给受害者,如下所示:

http://yoursite.com/foo.html?func=function();{alert('Im%20In%20Teh%20Codez ');}

而他们的javascript,不是你的,会被执行。 这个代码可以做的事情远比只popup警报当然更糟糕。 它可以窃取cookie,向你的应用程序发送请求等。

因此,请确保您永远不会eval来自用户input的不可信代码(以及查询stringid上的所有内容都视为用户input)。 您可以将用户input作为指向您的函数的键,但如果给定的string与对象中的键不匹配,请确保不执行任何操作。 例如:

 // set up the possible functions: var myFuncs = { func1: function () { alert('Function 1'); }, func2: function () { alert('Function 2'); }, func3: function () { alert('Function 3'); }, func4: function () { alert('Function 4'); }, func5: function () { alert('Function 5'); } }; // execute the one specified in the 'funcToRun' variable: myFuncs[funcToRun](); 

如果funcToRunvariables没有指向myFuncs对象中的任何东西,但是它将不会执行任何代码。

这有点丑,但它是我脑海中的第一个东西。 这也应该允许你传递参数:

 eval('var myfunc = ' + variable); myfunc(args, ...); 

如果你不需要传递参数,这可能会更简单。

 eval(variable + '();'); 

标准干码警告适用。