Показать сообщение отдельно
  #6 (permalink)  
Старый 22.07.2015, 11:50
Аспирант
Посмотреть профиль Найти все сообщения от tysonfury2015
 
Регистрация: 22.07.2015
Сообщений: 68

По поводу Вашего вопроса Вам уже подсказали, дело в неверном связывании. Позволю себе ремарку. Ваш код, это яркий пример того, как не следует писать/проектировать. Вместо того, чтобы обобщить поведение, Вы размазали его по экземплярам, безо всякой на то надобности. В результате, элементарный, по сути код:
Machine=function(){}
Machine.prototype.enable=function(){this.enabled=true}
Machine.prototype.disable=function(){this.enabled=false}
CoffeeMachine=function(){}
CoffeeMachine.prototype=Object.create(Machine.prototype)
CoffeeMachine.prototype.onReady=function(){
 if(this.enabled) return console.log("ready")
 console.log(
  "error, I am stupid: if I didn't switch coffemachine's power on, how it could runs the timer? It's really amasing shit!!!"
 )
}
CoffeeMachine.prototype.run=function(){console.log(this.enabled); setTimeout(this.onReady.bind(this), 1000)}


,превратился в ЁНХ'ню. Не забывайте, что ООП -- это, в том числе и о совместном использовании.

Далее. Ваш суперкласс Machine, выглядит как масло маслянное. Вы могли бы сеттить состояние напрямую в объектах, едва ли стоило ради этого использовать отдельные методы, это тоже усложнение на пустом месте. Кроме того, не забывайте, что сеттите Вы синхронно, а таймер у вас асинхронный, это тоже, может обернуться внезапным WTF'ом, если Вы недостаточно четко понимаете, почему Вы это делаете, и когда. Кроме того, сама абстракция отдает маразмом, отключенная кофеварка после цикла приготовления внезапно обнаруживает, что она все это время была выключена, это что то из серии "назад в будущее". Как то так.

ЗЫ не сочтите за попытку Вас обидеть чем-то, я честное слово не хотел этого, просто (надеюсь) конструктивная критика, которая (надеюсь) пойдет на пользу

Последний раз редактировалось tysonfury2015, 22.07.2015 в 11:52.
Ответить с цитированием