22. februar 2017 - 19:05Der er
2 kommentarer og 2 løsninger
Variable og henvisninger til variable
var v0 = 'a', v1 = v0; v0 = 'b'; alert( v1 );
Jeg sætter en variabel v0 til værdien 'a'. Så sætter variablen v1 til at være det samme som v0, altså 'a'. Til sidst overskrives variablen v0 med værdien 'b'. Men desværre overskrives den variabel v1 der henviser til variablen v0 ikke.
Findes der en måde hvor man kan lave en 'dynamisk' henvisning til en anden variabel, så den også finder den nye værdi, hvis variablen er blevet ændret?
Jeg ved, at man kan bruge eval, og det bliver måske også løsningen på mit problem, selvom det vist ikke er så velset at bruge den kodestump. Men findes der andre og bedre måder?
Først og fremmest bør din kode vel reelt se sådan ud
var v0 = 'a', v1 = v0;
Altså, medmindre du selvfølgelig netop vil benytte evil. eval....
I din situation er der ikke en direkte løsning og det skyldes at du arbejder med primitive typer. Skifter du til at arbejde med reference typer, fx et array, så vil det virker (copy/paste fra nettet);
var a = [1,2,3]; var b = a; a[0] = 99; alert(b); // = [99,2,3]
Så, uden at kende til hvad du overordnet forsøger at opnå, kunne det måske være et ide at lave et simpelt objekt og så bruge det til at referere til på v0.
For det andet: Hvad er forskellen på det jeg skrev var v0 = 'a', v1 = v0; og det du skrev jeg burde lave min kode om til var v0 = 'a', v1 = v0;
For det tredje, så arbejdede jeg egentlig med et array, som jeg havde håbet at kunne udskifte i et snuptag med fx: var a = [1,2,3], b = a; a = [4,5,6]; alert(b);//= [1,2,3]
Men den går desværre ikke :(
Min løsning bliver desværre nok at genskabe forbindelsen mellem b og a efter at have skiftet hele arrayet ud, selvom det ikke er optimalt: var a = [1,2,3], b = a; a = [4,5,6]; b = a;//igen alert(b);//= [4,5,6]
sorry - jeg må have overset din kode øverst i spørgsmålet, jeg kiggede mest på anden del hvor du havde sat ' omkring v0 hvilket selvfølgelig netop er få at få eval til at fungere. Så bare glem den kommentar.
Grunden til at din kode med array ikke fungerer er, at du danner et nyt objekt og dermed går referencen tabt selvom du arbejder med en reference type. Hvis du derimod arbejder på det eksisterende objekt (som jeg gør i mit eksempel) vil det fungere efter hensigten. Hvis det af den ene eller anden grund ikke giver mening at gøre som i mit eksempel så lav dit egen objekt med dit array som en property, så burde det virke selvom du overskriver propertien.
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.