调用变量中命名的JavaScript函数

这个问题在这里已经有了答案:

  • 当我的名字作为字符串29答案时如何执行JavaScript函数

  • 我会避免评估。

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

  • 函数是第一类对象,因此它们可以是对象的属性(在这种情况下称为方法),甚至可以是数组的元素。
  • 如果您没有选择函数所属的对象,则它属于全局范围。 在浏览器中,这意味着你将它挂在名为“window”的对象上,这是全局图所在的对象。
  • 数组和对象密切相关。 (谣言是他们甚至可能是乱伦的结果!)你经常可以用点替代. 而不是方括号[] ,反之亦然。
  • 你的问题是考虑参考点方式而不是方括号方式的结果。

    那么,为什么不喜欢,

    window["functionName"]();
    

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

    myNameSpace["functionName"]();
    

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


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

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

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

    完全像诺斯瑞德娜在我之前40秒说的那样>。<


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

    例如,如果您要使用此处提出的eval解决方案,恶意用户可能会向受害者发送链接,如下所示:

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

    而他们的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对象中的任何内容,但是它不会执行任何代码,这将失败。

    链接地址: http://www.djcxy.com/p/94819.html

    上一篇: Calling a JavaScript function named in a variable

    下一篇: How to turn a String into a JavaScript function call?