Что делают данные строки кода в задаче?

Здравствуйте! Помогите пожалуйста понять код
Задание (взято из учебника):
Переопределите метод disable холодильника, чтобы при наличии в нём еды он выдавал ошибку.

Объясните пожалуйста значение этих строк кода в задаче
В честности
1)
Играет ли какую-то роль в конструкторе Machine этот код ?
this.disable = function() {
self._enabled = false;
};

2)
Для чего нужен var parentDisable = this.disable; и его вызов parentDisable();

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(); // ошибка, в холодильнике есть еда
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Играет ли какую-то роль в конструкторе Machine этот код ?
Разумеется, играет - иначе бы его не было в учебнике.

Для чего нужен var parentDisable = this.disable; и его вызов parentDisable();
На следующей строке this.disable переопределяется собственной логикой, поэтому нужно сохранить родительский функционал, чтобы использовать его и избежать дублирования логики.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08 Куратор тега JavaScript
Да играет. Это принцип наследования. Холодильник наследует параметры и методы от механизма, но в то-же время переопределяет их, и чтоб не потерять связь с механизмом, он сохраняет его параметры отдельно. Это базовые вещи, которые надо выучить. Здесь сразу видно, что отсутствуют знания и умение применять их. Надо учиться!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы