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

255
12 декабря 2016, 10:12

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

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

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

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

Answer 1

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

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

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

Answer 2

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

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

Answer 3

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

Answer 4

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');
READ ALSO
Как исправить Uncaught SyntaxError: Unexpected end of input?

Как исправить Uncaught SyntaxError: Unexpected end of input?

Пытаюсь писать jQuery скрипты на этом сайте, но они не работают, потому что Консоль показывает ошибку Uncaught SyntaxError: Unexpected end of input и указывает на первую...

307
Как получить атрибуты ВСЕЙ выборки jquery?

Как получить атрибуты ВСЕЙ выборки jquery?

Допустим, выборка такая: $( "Myclass" )

279
Плавное появление вложенных элементов

Плавное появление вложенных элементов

Как при помощи jquery можно реализовать следующую логику?

289
Не работает слайдер

Не работает слайдер

К слайдеру шли эти скрипты:

379