Autor Zpráva
firster
Profil *
Pekny den, som tu novy a v as2ke mam jednoduchy priklad:

var a = {x:1,y:2}
var b=a
b.x = 3;

trace (a.x+" "+b.x)
trace (a.y+" "+b.y)

vypisuje mi to ale
3 3
2 2

Vedel by mi niekto prosim poradit s riesenim toho ze chcem zmenit v premennej b.x na nieco tak aby a.x ostal povodny, predom dakujem.
weroro
Profil
var a:Object = {x:1, y:2};
var b:Object = new Object ();

for (var i in a) b[i] = a[i];

b.x = 3;

trace (a.x + " | " + b.x); // 1 | 3
trace (a.y + " | " + b.y); // 2 | 2
firster
Profil *
Velmi pekne dakujem za riesenie
weroro
Profil
V pohode. Ak by si potreboval aj vysvetlenie môjho riešenia, tak stačí napísať. To prečo tvoje riešenie nefunguje neviem vysvetliť.
firster
Profil *
Diky, ja tomu chapem tak ze enum {} je vlastne flashom preinterpretovanie do vseobecneho Objectu, ktory je pouzity pre uschovanie urciteho druhu premennych (a len sa prepriradia do noveho pola prvok po prvku), nemam to potvrdene ale myslim ze dany nazov premennej je len odkazom na konkretny objekt ktory flash vytvara a moj povodny kod "var b=a" priradil len odkaz na objekt.

V novsom AS3 bolo upustene od pouzivania enum (ak sa nemylim), mozno mimo dalsich zmien aj prave kvoli snahe o silnejsiu typizaciu, kedze mam nazor ze samotny vyvojari mnohe veci trosku obchadzali tym ze vsetko boli len objekty a bodka mohla znamenat prilis vela moznosti, (podobjekt,pole,premenna,enum atd...) co v dosledku tiez flash spomalovalo tym ze musel casto urcit aj z 10 moznosti o co konkretne islo.
Mozem sa mylit, no takto som si to vysvetlil ja, neviem ci to tak je ale myslim si ze az tak daleko od pravdy niesom.

Kazdopadne som velmi rad ze riesenie existuje, este raz moc diky.
weroro
Profil
Inak ak to budeš používať v projekte často, urob si z toho prototyp.
Object.prototype.copyObject = function (a:Object):Object 
    {
        for (var i in a)
        {
            this[i] = a[i];
        }
        return this;
    };
použitie:
var a:Object = {x:1, y:2};
var b:Object = new Object ();
 
b.copyObject(a);
 
b.x = 3;
 
trace (a.x + " | " + b.x); // 1 | 3
trace (a.y + " | " + b.y); // 2 | 2

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: