Avatar billede fralle.dk Nybegynder
20. juni 2004 - 21:22 Der er 4 kommentarer og
1 løsning

setTimeout problem.

Hejsa,

Jeg er ved at lave et lille JavaScript spil, og stødte på et problem mht. setTimeout. Nedenfor ses en forenklet udgave af problemet, der giver en fejl ved eksekvering. Hvis funktionen Start derimod flyttes uden for funktionen Spil, virker alt som det skal. Grunden til at jeg ikke har flyttet funktionen Start udenfor er, at jeg tænkte jeg ville lave lidt "dataindkapsling".

function Spil()
{
  this.Start = Start;

  function Start()
  {
    setTimeout('Start()', 500);
  }
}

var spil = new Spil();
spil.Start();

Er der nogle der kan se hvad problemet med ovenstående er? På forhånd mange tak for hjælpen.


/Fralle.dk
Avatar billede roenving Novice
20. juni 2004 - 21:46 #1
Prøv at sætte metode-tildelingen efter funktions-erklæringen:

function Spil(){
  function Start()
  {
    setTimeout('Start()', 500);
  }
  this.Start = Start;
}
Avatar billede knudx Nybegynder
20. juni 2004 - 23:56 #2
Det er lige meget om "this.Start = Start" står først eller sidst... Det det kommer an på er om setTimeout får en besked der kan afvikles 'uden for sammenhængen'; når du skriver setTimeout('Start()'..., vil browseren prøve at finde start som et globalt objekt, eller som en property på window-objektet. Du kan enten skrive

setTimeout('spil.Start()', 500);

det er ikke helt kosher, da din funktion Spil så bliver gjort afhængig af

var spil = new Spil();

som gør variablen 'spil' tilgængelig for Timeout. Du kan også vælge at skrive (i stedet for 'this.Start = ...')

Spil.start = Start ();
function Start () {
    setTimeout ('Spil.start()',500);
}
Så bliver Start gjort til property på det 'globale' objekt / constructor-funktion Spil. Til gengæld kan du så ikke lave mere end ét Spil, da Start fra det første instance ville blive overskrevet af Start fra nr. 2.
Avatar billede fralle.dk Nybegynder
21. juni 2004 - 17:20 #3
Tak for svaret knudx - Det var perfekt! :o)
Avatar billede fralle.dk Nybegynder
21. juni 2004 - 17:22 #4
knudx: kan du ikke lige lave et svar, så jeg kan give dig dine point? ..ser ud til at det ikke er muligt med en kommentar :o/.
Avatar billede knudx Nybegynder
21. juni 2004 - 18:14 #5
jup, mange tak :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester