我正在开发一个涉及创建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();
});
答案 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函数创建对象的新实例。