Цитата:
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.: это все на ночь глядя, так что на истину не претендую :) |
Цитата:
var Paradise = { state: "inactive", paradiseLost: function() { function AddActiveMarker( index, obj ) { alert( obj.state ); } AddActiveMarker( 0, this ); } }; Paradise.paradiseLost(); твой пример рабочий. Ищи ошибку в другом месте, например, логике и/или таймаутах. |
Часовой пояс GMT +3, время: 11:45. |