【问题标题】:Calling all functions in an object/function调用对象/函数中的所有函数
【发布时间】:2015-10-22 23:56:36
【问题描述】:

我正在尝试在 JavaScript 中做一些 OOP,并且我正在尝试动态设置一些东西,以便我可以调用给定对象或函数中的所有函数。

我有一个循环,每秒调用一个函数,但在某些时候,该函数需要做不同的事情。所以我想我会每秒调用一次该函数,然后使用“原型”属性向该函数添加额外的函数。

基本上有一个不断调用函数的无限循环,并且根据调用该函数时的用户交互,它可能需要执行不同的函数。

var MAIN = function() {
var self = this;

this.Tick = 1;
this.Timer = function(){};

this.StartTimer = function(loop, interval) {
    self.Timer = setInterval(loop, interval);
}

this.StopTimer = function() {
    clearInterval(self.Timer);  
    self.Tick = 1;
}

this.Loop = function() {
    console.log(self.Tick);

    switch (self.Tick) {
        case 2:
            self.Phase1.init();
            break;
        case 4: 
            self.Phase2();
            break;
        case 6:
            self.Phase3();
            break;
        case 8:
            self.Phase4();
            break;
        case 10:
            self.Tick = 0;
            break;
    }

    self.Tick++;    
}       

this.Phase1 = function() {

}

我尝试了两种在 Phase1 中列出函数的方法。我尝试过使用函数和对象,但最接近执行其中的函数列表的方法是列出每个函数的名称。

函数尝试

    this.Phase1 = function() {
this.Phase1.Test1 = function() {
        alert("Test1"); 
    };

    this.Phase1.Test2 = function() {
        alert("Test2");
    };
}

对象尝试

this.Phase1 = {
    Test1: function() {
        alert("Test1"); 
    },
    Test2: function() {
        alert("Test2");
    }
}

我只是想获取每秒调用的函数的动态列表。

手动调用该函数没有问题。我知道我可以使用

MAIN.Phase1.Test1();

但我想动态地做到这一点。

【问题讨论】:

    标签: javascript jquery function oop


    【解决方案1】:

    也许:

    var obj = new Phase1();
    var tick = 1;
    
    obj[tick]();
    

    【讨论】:

      【解决方案2】:

      var Phase1 = {
        Test1: function() {
          alert('test 1');
        },
        Test2: function() {
          alert('test 2');
        },
        Test3: function() {
          alert('test 3');
        }
      };
      
      document.querySelector('button').onclick = function() {
        var testNumber = document.querySelector('input').value; // 1, 2 or 3
        Phase1['Test' + testNumber]();
      };
      <input type="number" value="1" min="1" max="3">
      <button>run test</button>

      【讨论】:

        猜你喜欢
        • 2015-11-07
        • 1970-01-01
        • 2017-06-03
        • 1970-01-01
        • 2013-07-01
        • 1970-01-01
        • 2022-01-11
        • 2019-02-08
        • 1970-01-01
        相关资源
        最近更新 更多