Det er desværre ikke godt nok. Det skal bruges i en dump method på Object classen, som kan dumpe et hvert object og vise dets propeties. Det kan jeg sagtens lave, men det kunne være fedt hvis den også kunne skrive navnet på det object den dumpede.
Jeg er slet ikke sikker på at det kan lade sig gøre.
Hmm du kan i hvert fald ikke få variablen _name til at blive en fast property for Object-klassen hvis det er det du vil. Men med et større projekt kan du lave dit eget property og function system hvor du bare laver alle dine egne properties og de faste om til funktioner der indeholder oplysningerne som så kan udskrives...
Et objekt er jo bare en samling af egenskaber og metoder. Dette objekt kan du så lave referencer til:
etObjekt = new Object(); etObjekt.tal = 4; etAndetObjekt = etObjekt;
Så er etObjekt en reference til et objekt, der indeholder en egenskab.
Men etAndetObjekt er jo en reference til fuldstændig det samme objekt. "Inde" fra objektet aner det jo ikke, hvilke referencer, der findes på objektet. Der kan jo være tusindvis af referencer til samme objekt (eller 0), så hvordan skal man inde fra objektet kunne gætte, hvad en af dem hedder?
Men hvordan kan det så lade sig gøre på moviclips? De er vel lige så meget et objekt som f.eks. en array.
Man kan jo også sagtens:
trace(movie1_mc._name); movie2_mc = movie1_mc; trace(movie2_mc._name); // begge trace giver heldigvis movie1_mc
Der bliver altså automatisk lavet en property der hedder _name på et MC. Kan det være derfor (bl.a.) at moviclips og textfields bliver lavet med en method istedet for med new?
Exactly... Movieclips og Textfields er jo ikke "standard" objekter - men har også en kompleks grafisk repræsentation.
Movieclips er oprettet således, at de har en "rigtig" sti og et "rigtig" navn, som er der, hvor de første gang bliver oprettet. Det er jo også her, de vil være synlige i forhold til mc-hierarkiet. Faktisk er _name ikke kun en readonly-egenskab, men du kan også sætte den (hvilket sletter stien til et oprindelige movieclip og laver et nyt):
num2_mc = this.createEmptyMovieClip("num1_mc", 1); trace("num1 name = "+num1_mc._name); trace("num2 name = "+num2_mc._name); num1_mc._name = "num3_mc"; trace("num1 name = "+num1_mc._name); trace("num2 name = "+num2_mc._name); trace("num3 name = "+num3_mc._name);
I ovenstående har jeg lavet den med "new" - men i praksis ville det være smarterere at smide den på Movieclip.prototypen som pyroman foreslog helt i starten.
Og man kunne endda beskytte funktionen helt ved at kræve et tredje argument som skulle være "12345foobar" som Movieclip funktionen vidste men som man ikke kunne gætte. Så kunne ethvert forsøg på at bruge "new mitCustomObjekt" bare returnere null...
Jeg anvender $ foran variablen, fordi den er beskyttet i den forstand, at brugeren ikke må sætte eller læse den direkte - kun via egenskaben "_name" som jeg kan kontrollere...
Hvis brugeren sætter $_name så går det galt... Man kan godt beskytte det endnu bedre men bare for eksemplets skyld.
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.