en.javascript.info/1-js/8-oop/3-getters-setters/4-setter-onready/task.md
Ilya Kantor 87bf53d076 update
2014-11-16 01:40:20 +03:00

58 lines
No EOL
1.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Создать сеттер для onReady
[importance 5]
Обычно когда кофе готов, мы хотим что-то сделать, например выпить его.
Сейчас при готовности срабатывает функция `onReady`, но она жёстко задана в коде:
```js
function CoffeeMachine(power, capacity) {
var waterAmount = 0;
var WATER_HEAT_CAPACITY = 4200;
function getTimeToBoil() {
return waterAmount * WATER_HEAT_CAPACITY * 80 / power;
}
this.setWaterAmount = function(amount) {
// ... проверки пропущены для краткости
waterAmount = amount;
};
this.getWaterAmount = function(amount) {
return waterAmount;
};
*!*
function onReady() {
alert('Кофе готов!');
}
*/!*
this.run = function() {
setTimeout(onReady, getTimeToBoil());
};
}
```
Создайте сеттер `setOnReady`, чтобы код снаружи мог назначить свой `onReady`, вот так:
```js
var coffeeMachine = new CoffeeMachine(20000, 500);
coffeeMachine.setWaterAmount(150);
*!*
coffeeMachine.setOnReady(function() {
var amount = coffeeMachine.getWaterAmount();
alert('Готов кофе: ' + amount + 'мл'); // Кофе готов: 150 мл
});
*/!*
coffeeMachine.run();
```
P.S. Значение `onReady` по умолчанию должно быть таким же, как и раньше.
P.P.S. Постарайтесь сделать так, чтобы `setOnReady` можно было вызвать не только до, но и *после* запуска кофеварки, то есть чтобы функцию `onReady` можно было изменить в любой момент до её срабатывания.