Показать сообщение отдельно
  #1 (permalink)  
Старый 31.01.2015, 19:44
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Проблема с this
Приветствую. Прошу помочь разобраться с работой данного кода:

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. Как она там доступна?
Ответить с цитированием