Ude af scope?

Tags:    javascript

<< < 12 > >>
Jeg sidder her med et irriterende problem. Jeg har en klasse hvor jeg har følgende kode

Fold kodeboks ind/udKode 


Problemet er at når this.animate bliver kaldt fra graphic er this pludselig en reference til graphic, og jeg kan derfor ikke få adgang til speed variablet. Hvad kan jeg gøre, hvis der overhovedet er noget at gøre ved det.



Indlæg senest redigeret d. 25.09.2009 23:01 af Bruger #3275
11 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Du er nødt til at enten gemme this i en anden variabel og så bruge den ellers kan du gemme de variabler du vil bruge som lokale variable i stedet.

fx

Fold kodeboks ind/udKode 


eller

Fold kodeboks ind/udKode 


Og for lige at få terminologien på plads, så er der ikke noget, der hedder "klasse" i JavaScript.

Hvis addFrameListener er din egen funktion, kan du også bruge et alternativ:

Fold kodeboks ind/udKode 


Edit: blev vidst lige overhalet der.



Indlæg senest redigeret d. 25.09.2009 23:36 af Bruger #3143
delegate() er en prototype udvidelse til Function.
Kort fortalt returnere den en ny funktion, hvor det nye scope er smidt ind. Function.apply() er en standard funktion i JS.

Nedestående er en nedkogt udgave af hvad vi har forsøgt at løse.
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 26.09.2009 12:07 af Bruger #10216
Den enkle er:
Fold kodeboks ind/udKode 


Den cool'e er
Fold kodeboks ind/udKode 


Men ellers burde
this.animate.call(obj) også kunne virker.



Indlæg senest redigeret d. 25.09.2009 23:41 af Bruger #10216
Problemet er bare at den der addFrameListener-funktion ikke er min egen, men en del af et bibliotek jeg bruger. Så jeg ved ikke helt hvordan jeg skal implementere jeres løsninger.



Med kodeblok nr. 2
Fold kodeboks ind/udKode 




Jeg har roddet lidt med det nu men får enten fejlen animate is not defined eller animate.delegate is not defined.

Du kan lige prøve at få hele koden og vise hvor koden skal sættes ind henne :D

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 26.09.2009 10:14 af Bruger #3275
Det burde gerne virke med:

Fold kodeboks ind/udKode 




Eller... :)

Fold kodeboks ind/udKode 




Gnu's meldte om fejlen "console is not defined" hvilket sikkert kommer fra det eksterne bibliotek. Jespers virkede dog helt fint. Mange tak til jer begge to.



Michael: hvordan virker denne function.delegate? Jeg kan hverken finde den på Google eller på https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Function#Methods



<< < 12 > >>
t