Javascript 将类绑定到另一个类的实例

Javascript 将类绑定到另一个类的实例,javascript,jquery,Javascript,Jquery,我正在构建一个JS应用程序,使用多个定时器(数字、模拟)。我想使用一个基类作为计时器的函数:启动、停止、更新等 每次创建计时器时,都会创建新的onChange事件。因此,当计时器滴答作响时,多个实例得到更新,而不仅仅是在其中创建计时器的实例 我的问题是:如何绑定另一个类并Timer实例 计时器类: class Timer = { constructor() { this.seconds = 0; } start() { this.tim

我正在构建一个JS应用程序,使用多个定时器(数字、模拟)。我想使用一个基类作为
计时器
的函数:启动、停止、更新等

每次创建计时器时,都会创建新的
onChange
事件。因此,当计时器滴答作响时,多个实例得到更新,而不仅仅是在其中创建计时器的实例

我的问题是:如何绑定另一个类并
Timer
实例

计时器类:

class Timer = {

    constructor() {
        this.seconds = 0;
    }

    start() {
        this.timer = setInterval(update, 25);
    }

    stop() {
        clearInterval(this.timer);
    }

    update() {

        this.seconds += 1;

        //emit data
        let event = new Event("timer-tick");
        event.detail = {
            seconds: seconds,
        }

        document.body.dispatchEvent(event);
    }
}
数字定时器类:

class DigitalTimer = {

    constructor() {
        this.timer = new Timer();
        this.handleEvent();
    }

    handleEvent() {

        $('body').on('timer-tick', function(e) {
            //tick, do somehting with it.
        });
    }

    start() {
        this.timer.start();
    }

    stop() {
        this.timer.stop()
    }
}

通过在一个普通对象上绑定
触发器
事件,我确实实现了它。

工作样本:

函数原型上有一个方法可以满足您的需要

start() {
    this.timer = setInterval(this.update.bind(this), 25);
}

另一方面,您不应该依靠
setInterval
setTimeout
来增加时间。当然,它们在进行定期调用时很有用,但不能保证所用的时间。您可以在每次调用时将初始对象与新对象进行比较。

我认为您所需要做的就是不要在
文档上全局触发timer tick事件。body
-而是使用单个
timer
实例注册回调,然后从
update
方法调用它们,而不是使用dom事件。@Bergi你能再解释一下吗;我不明白如何调用更新函数。保留一个函数数组(或完整的
DigitalTimer
instances),并在
update
方法中调用那些
handleEvent
方法,而不是触发DOM事件。或者,使用
jQuery.Callbacks()
或其他一些事件发射器。
start() {
    this.timer = setInterval(this.update.bind(this), 25);
}