Hej jeg sidder lige med et lille problem i javascript jeg har bygget en række funktioner som virker perfekt og vil lave dem til en klasse problemet er så at i en af funktionerne bruger jeg setTimeout ikke et problem i sig selv men når den skal kalde den funktion den stå i hvordan skal man så gøre:
setTimeout('this.func()',1) // siger det ikke er en function setTimeout('func()',1) // siger den ikke er defineret setTimeout('this.func',1) // gør ingen ting setTimeout('func',1) // gør ingen ting
hvis ikke der findes en løsning så måske et alternativ!!!
Du skal oprette en variabel, der refererer til objekt-instansen:
<script type="text/JavaScript"> function MyObj() { var me = this; this.foo = function(){ alert("Du har kaldt metoden foo på en instans af MyObj"); } this.bar = function(){ setTimeout(function(){me.foo()}, 1000) } return this; }
- men du opretter en closeure i metoden bar. Den slags kan IE ikke slette i hukommelsen, hvilket resulterer i et mindre memory-leak i IE.
At give dig den lange forklaring med løsninger på fejl/uhensigtsmæssigheder/mangler i IE's garbage-collection vil dog føre for vidt her - så du må finde dig i 'hukommelsestabet' =)
montago >> Det er forkert. Dit første eksempel kalder ikke den rigtige metode ... nemlig metoden på instansen. I stedet kalder den en statisk metode på object-constructor'en. Det er to helt forskellige ting!
Det andet eksempel er en helt anden situation, end den spørgeren sidder med
"Ole: som sagt har jeg selv fået det til at virke på den måde... kommer an på hvor mange objekt-instanser der skal laves..."
Med al respekt: Du har ikke forstået det første af objekt-orienteret programmering! Det er noget lodret vrøvl, du skriver ... det kommer absolut ikke anpå, hvormange instanser, der skal laves. Hvorfor i alverden skulle antallet have indflydelse?
Hvorfor tester du ikke bare det, du skriver? Prøv at skrive:
<script type="text/JavaScript"> function MitObject(){ this.Method = function(){ setTimeout('MitObject.Method()',500); } }
var o = new MitObject(); o.Method(); </script>
- og se, hvad der (ikke) sker ;o)
De to næste linjer i din kommentar er ligeledes noget vrøvl, men dine misforståelser grunder sikkert i manglende OOP-oveblik/viden =)
Ole: Javascript er altså ikke direkte OO, man kan lave kode som minder om OO med mange af grundprincipperne... men det er ligeså nemt at lave hacked kode som VIL virke...
som sagt har jeg selv fået tingene til at virke mit skrevne eksempel !
og jo, jeg ved godt det er nasty måde at håndtere objekter på...
Jeg ved udmærket godt, at JS ikke er objekt orienteret, men objekt baseret ... baseret på prototyping. Det gør nu ikke, at man ikke kan skrive kode, der ligner OO til forveksling
Det, du laver i dit sidste eksempel, ligner _absolut_ ikke OO ... og så er det noget komplet andet end det, du skrev før. Dét kan nemlig _aldrig_ komme til at virke.
Din 'løsning' kræver jo, constructor'en iforvejen kender navnet på instansen. Så fjerner du jo enhver grund til at bruge objekter. Til gengæld får du dig en laaaaaaaang tur over åen ... for at hente et snapseglas vand. det er kort og godt rigtig skidt kode!
Hvorfor ikke bare bruge den metode, jeg begyndte denne tråd med? Det er den, der er de facto standard blandt JS-kodere ... og så kan den bruges til noget fornuftigt =)
Synes godt om
Ny brugerNybegynder
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.