Приветствую. Прошу помочь разобраться с работой данного кода:
function Machine() {
this._enabled = false;
var self = this; // ссылка на объект создаваемый CoffeeMachine
this.enable = function() {
// внешняя переменная вместо this
self._enabled = true;
};
this.disable = function() {
this._enabled = false;
};
}
function CoffeeMachine() {
Machine.apply(this, arguments);
var parentEnable = this.enable;
this.enable = function() {
parentEnable();
/// this.run(); и другие методы
}
}
var coffeeMachine = new CoffeeMachine();
coffeeMachine.enable();
В переменную parentEnable копируется эта функция:
function() {
self._enabled = true;
};
Когда происходит вызов coffeeMachine.enable() — будет запущена функция parentEnable. Меня вводит в заблуждение переменная self внутри нее. Она ведь локальная переменная другой функции. Внутри функции Machine она доступна через замыкание. Но parentEnable находится внутри конструктора CoffeeMachine. Как она там доступна?