2017-07-19 90 views
0

我正在研究一个涉及创建2个计时器的项目。 风格不同,但是,两个计时器 的操作非常相似。我为此创建了2个不同的对象, 但我想知道是否有更有效的方法来重构 this并避免重复?是否有更有效的方法来组合这些对象?

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(); 
}); 
+1

是的。使用功能。 – evolutionxbox

+2

如果你的代码实际上在工作,你可能想问[CodeReview](https://codereview.stackexchange.com/) – Terry

回答

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(); 
}); 

希望这有助于。

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函数创建对象的新实例。

相关问题