【问题标题】:call javascript object method with a variable使用变量调用 javascript 对象方法
【发布时间】:2011-07-18 18:53:16
【问题描述】:

我是面向对象的 JavaScript 新手。我有一个变量,我想用它的值来调用对象的方法。像这样..

var foo = {
    bar: function() {},
    barr: function() {}
}

现在有一个变量,其值可以是barbarr 这两个方法的名称中的任何一个 我想用类似的东西给他们打电话

var myvar = 'bar';
foo.{myVar}();

【问题讨论】:

  • 如果您开始学习 JavaScript,这可能是一篇不错的文章:John Resig 的 Learning Advanced Javascript。我知道它说的是“高级”,但它是从基本示例开始的,并且有一个很好的交互式界面来修改和运行代码。
  • @Groo 嘿!多谢!一个新的对象和TBH他们有点令人困惑..:O但我在它上面:D

标签: javascript object


【解决方案1】:

所以我假设您想根据字符串动态调用适当的函数。你可以这样做:

var myVar = 'bar';
foo[myVar]();

或者您也可以使用eval,但这样做风险更大(容易受到注入攻击)且速度较慢(不要这样做!:P):

var myVar = 'bar';
eval('foo.' + myVar + '()');

【讨论】:

  • 谢谢.. 有很多答案:O 看起来我问了一个 n00b 问题:P 但嘿,谢谢大家:)
  • 除了刚刚回答的问题外,没有任何 n00b 问题 :)
  • :D 所以显然它们也像数组一样工作。我们可以像调用数组array['key'] 一样调用它们。有趣的。谢谢!
  • @Achshar - 在您的示例中, foo 是一个对象。所有对象都可以使用数组类型语法访问它们的属性。它不是一个真正的数组(这就是为什么我写这篇评论以确保你不认为它是一个数组),但你可以使用 foo['x'] 语法来访问属性,就像你可以一样使用 foo.x.
  • @jfriend00 哦,是的,我知道是对的 :) 我只是想知道语法是一样的,这样开发人员就不必为语言中的所有不同事物记住一堆不同的语法: D
【解决方案2】:

由于您可以通过下标符号访问对象的元素,因此以下内容将满足您的需求:

var myVar = 'bar';
foo[myVar]();

【讨论】:

    【解决方案3】:

    你可以说:

    foo[myVar]();
    

    由于foo 是一个JavaScript 对象,此代码将按包含在myVar 变量中的名称引用该成员。

    【讨论】:

      【解决方案4】:
      var foo = {
          bar: function() { alert('bar'); },
          barr: function() { alert('barr'); }
      }
      
      
      var myvar = 'bar';
      foo[myvar](); // alert 'bar'
      

      【讨论】:

        【解决方案5】:

        使用类似:foo[myVar]();

        【讨论】:

        • 以这种方式在对象方法内部调用似乎不起作用。使用 try/catch 消息说 'this[myVar] is not a function'
        【解决方案6】:

        应该是这样的

        foo[myvar]();
        

        【讨论】:

          猜你喜欢
          • 2015-05-27
          • 1970-01-01
          • 1970-01-01
          • 2013-08-18
          • 2011-11-11
          • 1970-01-01
          • 1970-01-01
          • 2019-02-08
          • 1970-01-01
          相关资源
          最近更新 更多