Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Доступ к свойству внутри метода. (https://javascript.ru/forum/misc/30887-dostup-k-svojjstvu-vnutri-metoda.html)

nerv_ 19.08.2012 22:30

Цитата:

Сообщение от LittlePony
А точек с запятыми где не хватает?

почти везде )

LittlePony, как же вы такие большие коды лепите, если не понимаете, что происходит :)
Давай мы поступим следующим образом, ты выложишь небольшой рабочий пример, который тебе не ясен.

пробуй так
paradiseBoom: function(){
	var self = this;
	var $happiness = $(self.el).children("li")
	var animateDuration = self.animateDuration
	var animateDelay = self.animateDelay
	function AddActiveMarker(index){
		var $cHappiness = $happiness.eq(index)
		if($cHappiness.size()==1){
			$("#eden").show()
			switch(index){
				case 0:
					$("#tree")
						.css({opacity:0,display:"block"})
						.animate({opacity:1},{duration:animateDuration})
					break
				case 1:
					$("#mrpostman")
						.css({opacity:0,display:"block"})
						.animate({opacity:1},{duration:animateDuration})
					break
				case 2:
					$("#bench")
						.css({opacity:0,display:"block"})
						.animate({opacity:1},{duration:animateDuration})
					break
			}
			$("<span class=activemarker />")
				.css({opacity:0})
				.appendTo($cHappiness).animate({opacity:1},{duration:animateDuration,complete:function(){
					if(self.state=="boom") setTimeout(function(){AddActiveMarker(index+1)},animateDelay)
				}})
		}
	}
	AddActiveMarker(0,self);
}

признаться, долго тупил, пытаясь понять, что происходит. melky, прав. Ситуация следующая (как я понял):
первый раз ты вызываешь метод paradiseBoom так: paradise.paradiseBoom. Здесь все нормально, this там правильный. Когда у тебя происходит это setTimeout(function(){AddActiveMarker(index+1,obj) },animateDelay), то this там window. Хотя это роли не играет :D

p.s.: это все на ночь глядя, так что на истину не претендую :)

nerv_ 19.08.2012 23:19

Цитата:

Сообщение от LittlePony (Сообщение 198718)
Здравствуйте.
Вопрос: что я не так делаю?
Кусочек кода, содержащий только значимое для вопроса:
var Paradise = {
	state: "inactive",
	paradiseLost: function(){
		function AddActiveMarker(index,obj){
			console.log(obj.state)
		}
		AddActiveMarker(0,this)
	}
}

свойство state успешно меняется другой функцией.
Значение этого свойства нужно использовать в функции AddActiveMarker().
Внутри функции paradiseLost() это свойство читается нормально, но во вложенную функцию передать не могу, получаю undefined.
Где чего недопонимаю?
Заранее спасибо.

короче, дорогая, ты нас с самого начала запутала
var Paradise = {
	state: "inactive",
	paradiseLost: function() {
		function AddActiveMarker( index, obj ) {
			alert( obj.state );
		}
		AddActiveMarker( 0, this );
	}
};

Paradise.paradiseLost();

твой пример рабочий. Ищи ошибку в другом месте, например, логике и/или таймаутах.


Часовой пояс GMT +3, время: 11:45.