20. juni 2004 - 21:22Der 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.
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.
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.