Переопределите disable
важность: 5
Переопределите метод disable
холодильника, чтобы при наличии в нём еды он выдавал ошибку.
Код для проверки:
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("кус-кус");
fridge.disable(); // ошибка, в холодильнике есть еда
В качестве исходного кода используйте решение предыдущей задачи.
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();
};
this.filterFood = function(filter) {
return food.filter(filter);
};
this.removeFood = function(item) {
var idx = food.indexOf(item);
if (idx != -1) food.splice(idx, 1);
};
var parentDisable = this.disable;
this.disable = function() {
if (food.length) {
throw new Error("Нельзя выключить: внутри еда");
}
parentDisable();
};
}
var fridge = new Fridge(500);
fridge.enable();
fridge.addFood("кус-кус");
fridge.disable(); // ошибка, в холодильнике есть еда