Унаследуйте холодильник
важность: 4
Создайте класс для холодильника Fridge(power)
, наследующий от Machine
, с приватным свойством food
и методами addFood(...)
, getFood()
:
- Приватное свойство
food
хранит массив еды. - Публичный метод
addFood(item)
добавляет в массивfood
новую еду, доступен вызов с несколькими аргументамиaddFood(item1, item2...)
для добавления нескольких элементов сразу. - Если холодильник выключен, то добавить еду нельзя, будет ошибка.
- Максимальное количество еды ограничено
power/100
, гдеpower
– мощность холодильника, указывается в конструкторе. При попытке добавить больше – будет ошибка - Публичный метод
getFood()
возвращает еду в виде массива, добавление или удаление элементов из которого не должно влиять на свойствоfood
холодильника.
Код для проверки:
var fridge = new Fridge(200);
fridge.addFood("котлета"); // ошибка, холодильник выключен
Ещё код для проверки:
// создать холодильник мощностью 500 (не более 5 еды)
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("котлета");
fridge.addFood("сок", "зелень");
fridge.addFood("варенье", "пирог", "торт"); // ошибка, слишком много еды
Код использования холодильника без ошибок:
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("котлета");
fridge.addFood("сок", "варенье");
var fridgeFood = fridge.getFood();
alert( fridgeFood ); // котлета, сок, варенье
// добавление элементов не влияет на еду в холодильнике
fridgeFood.push("вилка", "ложка");
alert( fridge.getFood() ); // внутри по-прежнему: котлета, сок, варенье
Исходный код класса Machine
, от которого нужно наследовать:
function Machine(power) {
this._power = power;
this._enabled = false;
var self = this;
this.enable = function() {
self._enabled = true;
};
this.disable = function() {
self._enabled = false;
};
}
Решение:
function Fridge(power) {
// унаследовать
Machine.apply(this, arguments);
var food = []; // приватное свойство food
this.addFood = function() {
if (!this._enabled) {
throw new Error("Холодильник выключен");
}
if (food.length + arguments.length > this._power / 100) {
throw new Error("Нельзя добавить, не хватает мощности");
}
for (var i = 0; i < arguments.length; i++) {
food.push(arguments[i]); // добавить всё из arguments
}
};
this.getFood = function() {
// копируем еду в новый массив, чтобы манипуляции с ним не меняли food
return food.slice();
};
}