const Clock = function () { let minutes = 25 let seconds = 0 const clock = { reset: () => {e minutes = 25 seconds = 0 }, getTime: () => { return `${twoDigits(minutes)}:${twoDigits(seconds)}` }, setTime: (time) => { minutes = time.minutes seconds = time.seconds }, tick: () => { if (seconds === 0) { minutes -= 1 seconds = 59 return } seconds -= 1 } } const twoDigits = num => { if (num >= 10) return num return `0${num}` } return clock } const ClockComponent = { oninit(){ this.clock = new Clock() this.start = () => setInterval(() => { this.clock.tick() m.redraw() }, 1000) }, view: ( { state : { clock, start } } ) => m('div', m('h1', clock.getTime()), m('button', {onclick: () => start( clock ) }, 'Start') ) } m.mount(document.body, { view : () => [ m( ClockComponent ), m( ClockComponent ), m( ClockComponent ), m( ClockComponent ) ] } )