Показать сообщение отдельно
  #1 (permalink)  
Старый 16.05.2015, 22:39
Новичок на форуме
Посмотреть профиль Найти все сообщения от newjsser
 
Регистрация: 16.05.2015
Сообщений: 3

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

Последний раз редактировалось newjsser, 16.05.2015 в 22:50.
Ответить с цитированием