58 lines
No EOL
1.8 KiB
Markdown
58 lines
No EOL
1.8 KiB
Markdown
# Создать сеттер для 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` можно было изменить в любой момент до её срабатывания. |