Здравствуйте.
Есть вот такая функция:
function test(test) {
this.test = test;
$('#test').click(function(){
alert(this.test);
});
}
Подскажите, пожалуйста, как получить this.test, который мы передали при вызове?
Вот пример на jsfiddle.
Сделать лексическое замыкание на тот this
:
function test(test) {
this.test = test;
var that = this; // замкнулись
$('#test').click(function(){
alert(that.test);
});
}
Форк Вашего примера на jsfiddle
Тут описание принципов работы this
; понимание работы этого механизма - уже половина ответа.
Тут продолжение темы - учимся привязывать и добираться до нужного контекста.
В JS часто применяют сохранение контекста var self = this;
и обращаются к self
как к нужному this
.
Ответ @atwice хорошо это показал, я просто пару статеек для образовательной цели дал, которые дадут более обширное понимание вопроса.
bind - привязка контекста функции
jsfiddle
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');
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь писать jQuery скрипты на этом сайте, но они не работают, потому что Консоль показывает ошибку Uncaught SyntaxError: Unexpected end of input и указывает на первую...