调用以变量命名的JavaScript函数[重复]

2020/10/31 12:42 · javascript ·  · 0评论

我有一个JavaScript变量,其中包含JavaScript函数的名称。通过使用$ .ajax等加载并放置在页面上,此功能存在于页面上。

谁能告诉我如何调用变量中命名的javascript函数?

该函数的名称位于变量中,因为用于加载页面片段(将其插入到当前页面中)的URL包含要调用的函数的名称。

我愿意就如何实施此解决方案提出其他建议。

我会避免评估。

要解决此问题,您应该了解有关JavaScript的这些知识。

  1. 函数是一类对象,因此它们可以是对象的属性(在这种情况下,它们称为方法),甚至可以是数组的元素。
  2. 如果您不选择函数所属的对象,则它属于全局范围。在浏览器中,这意味着您将其挂在名为“ window”的对象上,这是全局变量所在的位置。
  3. 数组和对象紧密相关。(有传言说,它们甚至可能是乱伦的结果!)您通常可以使用点.而不是方括号来代替[],反之亦然。

您的问题是考虑点引用方式而不是方括号方式的结果。

所以,为什么不这样

window["functionName"]();

假设您的职能生活在全球空间中。如果已命名空间,则:

myNameSpace["functionName"]();

避免使用eval,并避免将字符串传入setTimeout和setInterval。我写了很多JS,而且我从不需要评估。“需要”评估源于对语言的了解不够深。您需要了解范围,上下文和语法。如果您曾经评估过,请问一下-您将很快学习。

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

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

var a = 'foo';
window[a]();

eval()因为eval()evaaaaaal

就像Nosredna在我面前40秒所说的那样。

绝对避免使用eval来做这样的事情,否则您将容易受到XSS(跨站点脚本)漏洞的攻击。

例如,如果您使用eval此处提出解决方案,那么一个邪恶的用户可以向其受害者发送一个链接,如下所示:

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

他们的javascript,而不是您的javascript,将被执行。当然,此代码可能比弹出警告更糟糕。它可能会窃取Cookie,将请求发送到您的应用程序等。

因此,请确保您永远不会eval从用户输入(以及查询字符串ID上的任何内容视为用户输入)输入的不受信任的代码。您可以将用户输入作为指向您函数的键,但是如果给定的字符串与对象中的键不匹配,请确保不执行任何操作。例如:

// 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]();

如果funcToRun变量未指向myFuncs对象中的任何内容,则此操作将失败,但不会执行任何代码。

这有点丑陋,但这是我脑海中浮现的第一件事。这也应该允许您传递参数:

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

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

eval(variable + '();');

适用标准干码警告。

本文地址:http://javascript.askforanswer.com/diaoyongyibianliangmingmingdejavascripthanshuzhongfu.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!