JavaScript函数内部的变量名称调用函数

Gon*_*nki 8 javascript function dynamic object

当其名称在变量中时,我在调用另一个函数内部的函数时遇到困难:

var obj = {}

obj.f = function() {
  var inner = {
    a: function() {
      function b() {
        alert('got it!');
      }
      b(); // WORKS AS EXPECTED
      x = 'b';
      [x](); // DOESN'T WORK, NEITHER this[x]() window[x](), etc.
    }
  }
  inner.a();
}

obj.f();
Run Code Online (Sandbox Code Playgroud)

我尝试[x]()使用不同的范围路径作为前缀,但到目前为止还没有成功.搜索现有答案并未发现任何问题.它适用于this[x]()if b()直接放在对象内部.我想保留b()作为函数内部function a()因为变量范围function a(),否则我需要传递许多参数b().

////重复问题:Quentin在这个帖子imo中提供了一个更优雅的答案.

Que*_*tin 18

使用与变量名称匹配的字符串,没有合理的方法来访问任意变量.(对于一个非常糟糕的方法,请参阅eval).

[x](); //什么都不行

您正在尝试将数组作为函数调用

既不 this[x]()

该函数不是inner对象的属性.

window[x]()

由于它不是全局的,因此它也不是窗口对象的属性.


如果需要根据字符串变量的值调用函数,则在对象中组织函数并从中访问它们.

  function b() {
    alert('got it!');
  }
  var myFunctions = {
      b: b
  };
  x = 'b';
  myFunctions[x](); 
Run Code Online (Sandbox Code Playgroud)