Правильная ссылка на метод конструктора

Всем хорошего дня, есть вопрос с учебника Ильи, перейдите по ссылке посмотреть пример кода в разделе "переопределения метода"
https://learn.javascript.ru/functional-inheritance
В этом разделе “переопределения метода” приводится пример через сохранение
метода класса

       var parentEnable = this.enable; // строка 26

В результате имеем такой код

   function Machine(power) {
    ...
      var self = this;
      this.enable = function() { //*1
         self._enabled = true;
      };
    ...
   }

   function CoffeeMachine(power) {
     Machine.apply(this, arguments);
     var parentEnable = this.enable; //*2 этот this.enable якобы из класса Machine
     this.enable = function() {  // *3
        parentEnable(); 
        this.run();
     }
     ...
   }

Я понимаю как используется
      parentEnable //*2
в функции
      this.enable = function() { ... // *3
но разве в момент выполнения
      this.enable = function() { // *3
      parentEnable(); //*2

Но разве в выполнении этой функции ссылка
      parentEnable() //*2
не будет ссылаться на новое значение
      this.enable = function() { //*3 т. к. она переопределена

Не могу понять почему
      parentEnable() //*2
ссылается на
      this.enable = function() { //*1
из конструктора
      Machine
?
Тот кто понимает, объясните пожалуйста как работает код.

Ссылка на значение в переменную var parentEnable = this.enable; записывается в момент присвоения, и после этого никакие манипуляции с тем местом (важно что с местом, а не значением), откуда была взята ссылка на значение в переменную, никак не повлияют на значение переменной.

Ты понимаешь как срабатывает этот код?

var obj = {
	ppp: {test: true}
}
var a = obj.ppp // reference link to {test: true}
obj.ppp = {
	test: false
}
console.log(a) // {test: true}

что изменение свойства ppp объекта obj никак не влияет на значение, хранящееся в переменной a.

1 лайк

По твоему объяснению теперь стало ясно, да я понимаю как работает код - в момент присвоения переменная
  a
содержит объект
  {test: true}
и именно объект а не результат поля
  obj.ppp
Спасибо

1 лайк