Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Возвращаемся к объектам (https://javascript.ru/forum/misc/55844-vozvrashhaemsya-k-obektam.html)

newjsser 16.05.2015 22:39

Возвращаемся к объектам
 
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

MallSerg 17.05.2015 08:53

foo, прекращай писать глупости пробуй решать реальные задачи

kostyanet 18.05.2015 08:50

А чтобы казалось меньше сырца, объект минимизирован вручную.


Часовой пояс GMT +3, время: 15:55.