Почему в методе объекта, this возвращает [object Window]?

Здравствуйте. Столкнулся с непонятным поведением в JavaScript. Может быть кто-нибудь сможет объяснить и подсказать?

Есть например такой код
function Test() {
	var this_ = this;

	this.init = function() {
		console.log(this, this_);
		this.second();
	}();

	this.second = function() {

	}
}

$(function() {
	var test = new Test();
});


В итоге в консоль выводится Window и Test соотвествтенно.
Подскажите пожалуйста почему так происходит? И как правильно поступить в данной ситуации?
Заранее спасибо.
  • Вопрос задан
  • 3195 просмотров
Решения вопроса 1
@PomanoB
Потому что вы вызываете init не как this.init()
Надо так:

    this.init = function() {
        console.log(this, this_);
        this.second();
    }

    this.second = function() {

    }
    this.init()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
AGvin
@AGvin
У Вас функция Test является глобальной, и поэтому она доступна в объекте Window.

Почитайте на досуге: http://learn.javascript.ru/closures, там вначале описывается, почему так.
Ответ написан
@ghosthope
Я бы попробовал сделать так:
function Test() {
    var this_ = this;

    init = function() {
        console.log(this_, this_);
        this_.second();
    };

    this.second = function() {

    }
    init();
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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