使用变量作为函数名称,可以是多个级别

时间:2017-09-22 12:06:40

标签: javascript

我浏览过网站,似乎遇到了一些解决方案,但似乎都没有。所以这就是问题所在。

我有以下Javascript:



THEOBJECT = {
  init: function() {
    this.tools.init();
  }
};

THEOBJECT.tools = {
  active: false,
  init: function() {
    // active variable updated elsewhere/loading
    if (!this.active) {
      THEOBJECT.utils.timeout('tools.init', 100);
    }
    // is active so continue   
  }
};

THEOBJECT.utils = {
  timeout: function(functionName, time) {
    setTimeout(function() {
      THEOBJECT[functionName]();
    }, time);
  }
};


THEOBJECT.init();




运行THEOBJECT.utils.timeout说:

时出错
  

THEOBJECT [functionName]不是函数

我试图运行THEOBJECT.tools.init()

我假设这是因为它不是THEOBJECT对象的直接函数是否有解决方法或者是split()最好的方法?

2 个答案:

答案 0 :(得分:1)

还可以使用lodash.js来执行此操作。请参阅更新的代码段。

或者使用下面提到的传统approch

您正试图以错误的方式访问某个属性

你正在做THEOBJECT[tools.init]这是不正确的。它应该像THEOBEJECT[tools][init]



THEOBJECT = {
  init: function() {
    this.tools.init();
  }
};

THEOBJECT.tools = {
  active: false,
  init: function() {
    // active variable updated elsewhere/loading
    if (!this.active) {
      THEOBJECT.utils.timeout('tools.init', 100);
    }
    console.log("active")
    // is active so continue   
  }
};

THEOBJECT.utils = {
  timeout: function(functionName, time) {
    setTimeout(function() {
     _.get(THEOBJECT,functionName);
    }, time);
  }
};


THEOBJECT.init();

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你也可以使用简单的缩小功能,并使其成为单行:

 9
 ***456***

在您的代码中:

&#13;
&#13;
functionName.split('.').reduce((acc,curr) => return acc[curr], THEOBJECT)();
&#13;
&#13;
&#13;