@djok2142

Почему вложенная функция перезаписывается?

Часто встречал такую конструкцию.
var fun1 = function() {
  
  this.init = function() {
  	console.log('Функция 1');
  }
  
  return this;
}();

<button onclick="fun1.init();">Какое ни будь действие</button>


Не совсем понимаю зачем вложенная функция init() присваивается обьекту this, а так же зачем в конце возвращается this.
В общем создал вторую такую функцию.
var fun2 = function() {
  
	this.init = function() {
  	console.log('Функция 2');
  }
  
  return this;
}();

Но теперь при вызове fun1.init(); в консоль выводится текст "Функция 2", то есть функция init() была переопределена из функции 2, почему так происходит? И как сделать что бы fun1.init(); и fun2.init(); выполняли разный код?
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
fomenkogregory
@fomenkogregory
Юниор софтварный инженер
Во внешней функции this - глобальный объект, в него добавляется метод init, затем этот объект возвращается и присваивается в переменную.
func1 === func2, хранят ссылку на один объект.
Чтобы они выполняли разный код можно сделать кучей других нормальных способов. На главный вопрос "зачем так писать" вам никто не ответит.)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы