Avatar billede speedy Nybegynder
22. juli 2002 - 23:13 Der er 16 kommentarer og
1 løsning

overføre et object i setTimeout

Hej,

se dette eksempel:

function start_hint(text1, text2){
    setTimeout("show_hint('" + text1 + "', '" + text2 + "')", 1000);
}

Det virker fint, da jeg kun giver tekst-strenge med som parametre. Men hvis jeg vil overføre et object, hvordan gør jeg så det ?

function start_hint(text, obj){
    setTimeout("show_hint('" + text + "', " + obj + ")", 1000);
}


ovenstående virker ikke :(

/SpEeDy
Avatar billede stigc Nybegynder
22. juli 2002 - 23:32 #1
Hvis variablen hedder obj, så:

function start_hint(text, obj){
    setTimeout("show_hint('" + text + "',obj)", 1000);
}
Avatar billede jakoba Nybegynder
22. juli 2002 - 23:37 #2
Næe, desværre. du kommer til at lave en statisk variabel i window at gemme den i:

Hvis variablen hedder obj, så:

var statiskMem = new Array();
function start_hint(text, obj){
    statiskMem[statiskMem.length] = obj; // tilføj for enden.
    setTimeout("show_hint('" + text + "',statiskMem["+(statiskMem.length-1)+"])", 1000);
}

mvh JakobA
Avatar billede stigc Nybegynder
22. juli 2002 - 23:44 #3
Hej JakobA

Forstår ikke helt... Skulle det jeg skrev ikke virke helt fint?
Avatar billede stigc Nybegynder
22. juli 2002 - 23:45 #4
<script>

function Statement () {
    this.say = "virker fint";
}

objSatement=new Statement();

setTimeout("alert(objSatement.say)", 1000);

</script>
Avatar billede speedy Nybegynder
22. juli 2002 - 23:55 #5
stigc...nej, dit eksempel virker ikke...men jeg ved ikke hvorfor...

Jakboba>>Okay, hvis der ikke er andre muligheder så går det jo nok ;) Takker for hjælpen!

Jeg har dog ikke brug for et array, så jeg har lavet den om til dette:

        var obj_keeper;
        function start_hint(text, obj){
            obj_keeper = obj;
            hint_timer = setTimeout("show_hint('" + text + "',obj_keeper)", 1000);
        }


Tak for hjælpen...


/SpEeDy
Avatar billede jakoba Nybegynder
23. juli 2002 - 00:15 #6
settimeout virker ved at genne en tekststreng, så så senere bliver taget frem og udført. tal og strenge kan konverteres til bogstaver og tilbage igen. Men en objektreferense kan ikke.

ded dig første eforslag kommer vi 1000 millisekunder bagefter til at sige:
    eval( "show_hint('det der står i text',obj)" );
men på det tidspunkt er funktionen start_hint forlængst færdig, og den 'obj' parameter den havde er nedlagt.

mvh JakobA
Avatar billede speedy Nybegynder
23. juli 2002 - 00:44 #7
okay, tak for forklaringen...så forstår jeg bedre det ikke virker.

/SpEeDy
Avatar billede bamzen Nybegynder
23. juli 2002 - 08:55 #8
Hvor jeg dog elsker eval() der kan du gøre de mest utrolige ting, med objekter steder hvor det er svært at beregne objekter ;-)
Avatar billede stigc Nybegynder
23. juli 2002 - 20:54 #9
jamen hov, mit eksempel virker da fint..........
Avatar billede speedy Nybegynder
23. juli 2002 - 20:57 #10
stigc>>Nej, ikke det som vedrørte mit problem. JakobA har ret.

/SpEeDy
Avatar billede stigc Nybegynder
23. juli 2002 - 21:01 #11
Ja , men det her virker fint:

<script>

function Statement () {
    this.say = "virker fint";
}

objSatement=new Statement();

setTimeout("alert(objSatement.say)", 1000);

</script>

Ergo objekter kan godt tilgås via setTimeout. Men selvfølgelig ikke hvis det ikke findes mere....
Avatar billede speedy Nybegynder
23. juli 2002 - 21:36 #12
Nej, da objektet ikke er globalt, men kun bliver kastet rundt via funktionerne så kan det ikke tilgåes på den måde du beskriver,

Men tak til alle for jeres hjælpsomhed !

/SpEeDy
Avatar billede stigc Nybegynder
23. juli 2002 - 21:40 #13
speedy >> Jeg er ikke ude på point...

Du kan da ikke sige "Nej" til det jeg skrive. Selvfølgelig kan du ikke hvis objektet ikke findes længere....
Avatar billede jakoba Nybegynder
23. juli 2002 - 21:52 #14
stigc >> det er rigtig og forkert det du skriver. Det der får dit til at virke er at den streng der sættes i kø indeholder objektets 'rigtige' navn i vinduet scope.
men det er sjældent tilfældet med objekter der ankommer som parametre til en funktion:

<script>

function Statement () {
    this.say = "virker fint";
}
function Statement2 () {
    this.say = "virker fint";
}

objSatement=new Statement();
objSatement2=new Statement2();

function setiko( denne );
    setTimeout("alert(denne.say)", 1000);
}

setiko( objSatement2 );
setiko( objSatement );

</script>
Avatar billede stigc Nybegynder
23. juli 2002 - 22:08 #15
Jeg er helt enig, troede bare i ikke havde fået mit eksemple til at kører. :)
Avatar billede stigc Nybegynder
23. juli 2002 - 22:09 #16
Kan godt se at mit ekemspel ikke svarer på Speedys problemstilling...
Avatar billede speedy Nybegynder
23. juli 2002 - 23:35 #17
stigc>>Jeg ved godt du ikke er ude efter point ;) Jeg håber ikke jeg får mine kommentarer til at lyde anklagende...

Og ja, jeg har prøvet dit eksempel og det virkede :)

MVH

/SpEeDy
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