有没有更有效的方法来组合这些对象?

时间:2017-07-19 12:52:04

标签: javascript jquery

我正在开发一个涉及创建2个计时器的项目。  但是,两种计时器的操作都不同 非常相似。我为此创建了2个不同的对象,  但我想知道是否有更有效的重构方法 这个并避免重复?

var timer1 = { 
  started: false, 
  minutes: 0,   
  seconds: 0, 
  interval: null,
  init: function() {
    var self = this;
    this.interval = setInterval(function() { 
      self.intervalCallback.apply(self); 
    }, 1000);
    // ...
}

var timer2 = { 
  timer2Started: false,
  timer2Minutes: 0, 
  timer2Seconds: 0,
  interval: null,
  init: function() { 
    var newTimer = this;
    this.interval = setInterval(function() { 
      self.intervalCallback.apply(newTimer); 
    }, 1000);
    // ...
}

$(document).ready(function() { 
  timer1.init(); 
  timer2.init(); 
});

2 个答案:

答案 0 :(得分:0)

您可以使用单个对象并分配给2个这样的变量

var timer = { 
  started: false, 
  minutes: 0,   
  seconds: 0, 
  interval: null,
  init: function() {
    var self = this;
    this.interval = setInterval(function() { 
      self.intervalCallback.apply(self); 
    }, 1000);
    // ...
}

var timer1 = timer, timer2 = timer;

$(document).ready(function() { 
  timer1.init(); 
  timer2.init(); 
});

希望这有帮助。

答案 1 :(得分:0)

您可以使用Object.assign功能。

您的代码应如下所示:

var timer1 = { 
    started: false, 
    minutes: 0,   
    seconds: 0, 
    interval: null,
    init: function() {
        var self = this;
        this.interval = setInterval(function() { 
            self.intervalCallback.apply(self); 
        }, 1000);
        // ...
    }
};

var timer2 = Object.assign({}, timer1);  

这样,timer1和timer2是2个不同的对象。如果只写timer2 = timer1,则timer1和timer2将引用同一个对象(timer1)。

那是因为JavaScript中的对象是通过引用而不是按值复制的。 Object.assign函数创建对象的新实例。

相关问题