JS — объектно-ориентированный язык, причем, в хорошем смысле. Конечно, до концепции «все есть объект» ему далековато, но в целом, ок. Однако, в последнее время наметилась нездоровая тенденция: заметать объекты под ковер. Это одна из главных причин стиля callback-hell. Я решил понемногу исправлять ситуацию. Начал с таймаутов и прочих интервалов. Я вытащил данный объект наружу, запилив слой абстракции над его методами, и теперь таймауты можно писать в ООП-стиле
try{global}catch(e){global=window}
Waiting={
clone: function(){return Object.create(this)},
init: function(src){for(var i in src){if(!src.hasOwnProperty(i)) return this; this[i]=src[i]} return this},
start: function(){this.id=global["set"+this.type](this.on.bind(this), this.pause)},
clear: function(){global["clear"+this.type](this.id)},
pause: 0
}
Timeout=Waiting.clone().init({type: "Timeout"})
Interval=Waiting.clone().init({type: "Interval"})
timeout=Timeout.clone().init({
value: 1,
on: function(){console.log(this.value)},
pause: 3000
})
timeout.start() // just a simple test
interval=Interval.clone().init({
value: 10,
on: function(){console.log(this.value)},
pause: 1000
})
timeout.on=function(){interval.clear()}
interval.start()
timeout.start()
// ::: 10
// ::: 10
// ::: 1