Получение this от начальной функции

Рейтинг: 0Ответов: 4Опубликовано: 18.03.2015

Здравствуйте.

Есть вот такая функция:

function test(test) {
    this.test = test;
    $('#test').click(function(){
        alert(this.test);
    });
}

Подскажите, пожалуйста, как получить this.test, который мы передали при вызове?
Вот пример на jsfiddle.

Ответы

▲ 1Принят

Сделать лексическое замыкание на тот this:

function test(test) {
    this.test = test;
    var that = this; // замкнулись
    $('#test').click(function(){
        alert(that.test);
     });
}

Форк Вашего примера на jsfiddle

▲ 2

Тут описание принципов работы this; понимание работы этого механизма - уже половина ответа.
Тут продолжение темы - учимся привязывать и добираться до нужного контекста.

В JS часто применяют сохранение контекста var self = this; и обращаются к self как к нужному this.
Ответ @atwice хорошо это показал, я просто пару статеек для образовательной цели дал, которые дадут более обширное понимание вопроса.

▲ 1

bind - привязка контекста функции
jsfiddle

▲ 1

this в функции вызванной не как конструктор указывает на глобальный объект. Это легко проверить:

function test(){
  return this === window;
}

console.log(test()); // true

Поэтому вызываем как конструктор, чтобы this указывал на созданный объект:

function Test(message) {
    this.message = message;
    this.init();
}

Test.prototype.init = function(){
    $('#test').click((function(){
      console.log(this.message);
    }).bind(this));
};

new Test('Hello');