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