У меня есть два разных объекта для создания часов. Аналоговый и цифровой. Это практически одно и то же, за исключением незначительных изменений.
Вместе с тем многие методы в объекте используются обоими; Я хочу, чтобы они были настроены. Поэтому я нуждаюсь в них в объекте. Как я могу расширить, например, объект Clock
используя базовые методы для analogueClock
и digitalClock
с Javascript?
Это то, что у меня есть и не работает:
вызов
if (clockType == 'digital') {
clk = new DigitalClock(theClockDiv);
} else if (clockType == 'analogue') {
clk = new AnalogueClock(theClockDiv);
}
baseClock = new baseClock();
$.extend({}, clk, baseClock);
И функции
function DigitalClock(theDigitalClockParent, indicatedTime) {
this.indicatedTime = indicatedTime;
this.interval = null;
this.buildClock = function() {
//CUSTOM THINGS HERE
}
this.setCurrentTime();
this.buildClock();
this.startRechecker();
}
function AnalogueClock(theAnalogueClockParent, indicatedTime) {
this.indicatedTime = indicatedTime;
this.interval = null;
this.buildClock = function() {
//CUSTOM THINGS HERE
}
this.setCurrentTime();
this.buildClock();
this.startRechecker();
}
function baseClock() {
this.setCurrentTime = function() {
if (this.indicatedTime != undefined) {
this.date = new Date(railsDateToTimestamp(this.indicatedTime));
} else {
this.date = new Date();
}
this.seconds = this.date.getSeconds();
this.minutes = this.date.getMinutes();
this.hours = this.date.getHours();
}
this.startInterval = function() {
//Use a proxy in the setInterval to keep the scope of the object.
this.interval = setInterval($.proxy(function() {
//console.log(this);
var newTime = updateClockTime(this.hours, this.minutes, this.seconds);
this.hours = newTime[0];
this.minutes = newTime[1];
this.seconds = newTime[2];
this.buildClock();
}, this), 1000);
}
this.stopInterval = function() {
window.clearInterval(this.interval);
this.interval = null;
}
}
Вы можете расширить свой DigitalClock
и AnalogueClock
своим базовым классом. Что-то вроде следующего.
DigitalClock.prototype = new baseClock();
AnalogueClock.prototype = new baseClock();
Таким образом, DigitalClock и AnalogueClock наследуют методы baseClock. Другим вариантом может быть использование mixin и расширение обоих классов с ним.
DigitalClock
расширьте егоDigitalClock.prototype = new baseClock();
,