Расширить методы в Javascript

0

У меня есть два разных объекта для создания часов. Аналоговый и цифровой. Это практически одно и то же, за исключением незначительных изменений.

Вместе с тем многие методы в объекте используются обоими; Я хочу, чтобы они были настроены. Поэтому я нуждаюсь в них в объекте. Как я могу расширить, например, объект 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;
    }   
}
Теги:
oop

1 ответ

3
Лучший ответ

Вы можете расширить свой DigitalClock и AnalogueClock своим базовым классом. Что-то вроде следующего.

DigitalClock.prototype = new baseClock();
AnalogueClock.prototype = new baseClock();

Таким образом, DigitalClock и AnalogueClock наследуют методы baseClock. Другим вариантом может быть использование mixin и расширение обоих классов с ним.

  • 0
    Где я могу использовать .prototype? При создании нового объекта, над функцией или в функции?
  • 0
    Сначала определите baseClass и любой производный класс. После определения производного класса расширьте его из baseClass. Так, например, после определения DigitalClock расширьте его DigitalClock.prototype = new baseClock(); ,
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню