ItsEvilTime
@ItsEvilTime
Сайленсер не дает мне покоя

Как обратиться через this к переменной из вложенной функции?

Только начал разбираться в модульном подходе.
Есть некий модуль, у которого:
settings - функция, определяющая переменные.
init - функция, показывающая эти переменные.
Проблема возникает на 11 строке, когда через this не определяется переменная, но уровнем выше, на 8-ой строке, через this эти же переменные определяются отлично. Сейчас я решаю эту проблему через Module.variable, что мне кажется неправильным.

Module = (function() {
  return {
    settings: function() {
      this.name = "Loire";
      this.surname = "Ralf";
    },
    init: function() {
      block.innerHTML = this.name;
      showSurname = function() {
        block2.innerHTML = Module.surname;
        block3.innerHTML = this.surname;
      }
      showSurname();
    }
  };
})();

Module.settings();
Module.init();

JSFiddle: https://jsfiddle.net/rvnLqu1q/1/

Вопрос: как сделать так, чтобы во вложенной функции можно было пользоваться this, ссылаясь на переменные, определенные в функции settings?
  • Вопрос задан
  • 268 просмотров
Решения вопроса 2
In4in
@In4in
°•× JavaScript Developer ^_^ ו°
Вот так можно сделать:

...
var showSurname = (function() {
   block2.innerHTML = Module.surname;
   block3.innerHTML = this.surname;
}).bind(this);

showSurname();
...


Для IE8-
Function.prototype.bind = function (context) {
  var f = this;
  return function() { 
    return f.apply(context, arguments);
  };
}
Ответ написан
Denormalization
@Denormalization
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@larionov_n
Использовать call, apply
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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