Avatar billede telemuzen Nybegynder
17. februar 2003 - 08:26 Der er 32 kommentarer og
2 løsninger

Hjælp til new Object

Hej.

Jeg sidder og læser om objecter, som man selv laver, hvis vi nu tager en eks.

screen = new Object();
screen.top = 0;
screen.buttom = 400;
screen.left = 0;
screen.right = 550;

Så kan man bruge objectet til vægge, men hvorfor ikke bare lave almindelige variabler?

top = 0;
buttom = 400;
left = 0;
right = 550;

Det er måske et dårligt eks., sådan som jeg forstår det, så kan objecter bruges til avanceret ting, nogen som kan give en dansk forklaring eller eks.?

Martin/
Avatar billede pyroman Nybegynder
17. februar 2003 - 09:40 #1
Objecter kan opbevare informationer og værdier i form af variabler ligesom hvis du bare skrev:
top = 400;
Men derudover virker de som en slags movieclips bare uden at de eksistere rent grafisk. De fungerer mest bare som en kasse til at opbevare ting i. Du kan lave flere kasser der indeholder de samme ting (top = 0;  bottom = 400 osv...)
Du kan altså også lave et object der hedder 'box' og ligeledes med screen indeholder variablerne top, bottom, left og right. Dette gør det nemmere at få overblik over ens informationer.

/Filip
Avatar billede barklund Nybegynder
17. februar 2003 - 09:52 #2
Det kan for eksempel udvides til at du har en anden funktion, der tager et enkelt argument, som er et objekt med 4 properties istedet for 4 argumenter. For eksempel kunne det være en funktion, der tog ovenstående objekt og tegnede det som en boks på skærmen.

Det smarteste ved objekter er dog ikke kun muligheden for at konstruere dem som ovenstående, men derimod at lave dem som en instans af en foruddefineret klasse:

function Vektor(x,y) {
    this.x = x;
    this.y = y;
}
myVector = new Vector(x,y);
trace(myVector.x+","+myVector.y);

Det fungerer lidt på samme måde - kan blot udnyttes i højere grad!
Avatar billede barklund Nybegynder
17. februar 2003 - 09:54 #3
bortset fra stavefejlen burde mit eksempel virke :o) (Vektor != Vector)
Avatar billede nikolajdu Nybegynder
17. februar 2003 - 09:55 #4
Den kan iøvrigt skrives noget kortere.

screen = {top:0, buttom:400, left:0, right:550};

Som pyroman er inde på så er det en glimrende metode til at holde styr på variabler. Screen  er måske ikke lige det bedste eksempel, da der formodenligt ikke vil være mere end et sæt værdier. Bedre eksempel må være med navne/brugere:

bruger1 = {navn:"nikolaj",efternavn:"ankjaer"}
bruger2 = {navn:"tele",efternavn:"muzen"}

Her kan du nu til hver en tid finde en brugers data ved at hente den "nemme" variabel 'navn'

trace(bruger1.navn)
trace(bruger2.navn)

Det er noget simplere end at gå i selvsving og opfinde nye variabler hele tiden. navn1, navn2, navn3 osv.

Lad os lige tage det avancerede eksempel med :


bruger = function (navn, efternavn) {
    this.navn = navn;
    this.efternavn = efternavn;
};
bruger.prototype.flink = "ja";
// kan bruges hvis vi vil initialisere alle brugere til at være flinke fætre
nikolajdu = new bruger("nikolaj", "ankjær");
telemuzen = new bruger("tele", "muzen");
trace(nikolajdu.flink);
nikolajdu.flink = "ok godt så";
// overskriver værdien flink for telemuzen;
trace(nikolajdu.flink);
delete (nikolajdu.flink);
// fjerner nikolajdu's status som flink, men da det er bygget af en prototype, så vil status altid vende tilbage til den af prototype satte værdi - altså "ja"
trace(nikolajdu.flink);
delete (nikolajdu);
// fjerner objektet og alle dets properties

/Nikolaj
Avatar billede telemuzen Nybegynder
17. februar 2003 - 10:14 #5
Så er jeg tilbage.
>>Barklund det som du mener er det det her?

screen = new Object();
screen.top = 0;
screen.buttom = 400;
screen.left = 0;
screen.right = 550;

function Bounds (screen) {
hvordan skal man hente de properties?
}
Jeg har lidt svært ved at overskue det,  : -D

Det smarteste ved objekter er dog ikke kun muligheden for at konstruere dem som ovenstående, men derimod at lave dem som en instans af en foruddefineret klasse: hvad mener du helt præsist?

Mener du at man kan lave instancer at screen objectet? eller?

Martin/
Avatar billede telemuzen Nybegynder
17. februar 2003 - 10:22 #6
nikolajdu>> havde ikke lige set dit indlæg.
Men det er vel svaret på mit spgs. til barklund.

De nye instancer laves bare som - new bruger("", "");
Hvad er det som man laver en ny instans fra? bruger.proto.flink eller function bruger?
Eller er prototypen en slags egenskab?
Shit hvor er der mange ting man skal holde styr på!!

Martin/
Avatar billede telemuzen Nybegynder
17. februar 2003 - 10:26 #7
trace(nikolajdu.flink);
nikolajdu.flink = "ok godt så";
Mener du at "ok godt så" kommer i output vinduet?
hvis du kun skriver trace(nikolaidu.flink);
så kommer der et "ja"?? eller?
Avatar billede barklund Nybegynder
17. februar 2003 - 10:28 #8
når du laver en function, så er det samtidig også en klasse...!

Hvis du er skarp til engelsk, bør du følge denne "lille" introduktion til object orienteret programmering i flash 5 (gælder også flash MX): http://www.debreuil.com/docs/ch01_Intro.htm

Derefter vil du være langt bedre rustet til hele denne samtale - for ikke at sige, at du vil have en viden der er denne samtale en del overlegen :o)
Avatar billede nikolajdu Nybegynder
17. februar 2003 - 10:29 #9
bruger.prototype.flink = "ja";

// giver alle brugere du opretter via bruger funktionen en status af at være flinke.

Og sørme om jeg ikke også lige fandt en lille fejl i mit eksempel

nikolajdu.flink = "ok godt så";
// overskriver værdien flink for telemuzen;

Der skulle selvfølgelig have stået "nikolajdu" til sidst....
Avatar billede telemuzen Nybegynder
17. februar 2003 - 10:33 #10
barklund>> jeg har læst den for lang tid siden, men tror at jeg skal gennemgå den igen, første gang man ser den er det bare black volapyk, men nu har jeg læst nogle forskellige bøger omkring det OOP, så jeg tror at jeg forstår mere af den nu.
Avatar billede telemuzen Nybegynder
17. februar 2003 - 10:36 #11
ok, så forstod jeg det,
nikolajdu.flink = "ok godt så";
// overskriver værdien flink for telemuzen;
første gang man tracer bliver det ja, hvis man vil have brugeren til at være "bad" kan man overskrive protoypen "ja"
ok? er det rigtigt forstået?
Første gang behøves ikke at være ja, hvis man har overskrevet "ja", før man tracer!?

Martin
Avatar billede nikolajdu Nybegynder
17. februar 2003 - 10:50 #12
Tror nok du har det, men for en sikkerhedsnåls skyld så hedder prototypen ikke "ja", men "flink" - "ja" er værdien.

Hvis ikke du forstår debreuil´s vejledning så kan den her måske give lidt mere hjælp : http://actionscript-toolbox.com/aboutobjects.php

"Første gang behøves ikke at være ja, hvis man har overskrevet "ja", før man tracer!?" ikke helt forstået.
Avatar billede telemuzen Nybegynder
17. februar 2003 - 11:02 #13
bruger = function (navn, efternavn) {
    this.navn = navn;
    this.efternavn = efternavn;
};
bruger.prototype.flink = "ja";
// kan bruges hvis vi vil initialisere alle brugere til at være flinke fætre
nikolajdu = new bruger("nikolaj", "ankjær");
telemuzen = new bruger("tele", "muzen");

trace(nikolajdu.flink); - her bliver det er "ja"

nikolajdu.flink = "ok godt så"; - her overskriver du "ja" med "ok godt så"

trace(nikolajdu.flink); - her bliver det "ok godt så"

Du forstå?
Avatar billede nikolajdu Nybegynder
17. februar 2003 - 11:48 #14
Det jeg ikke forstår er dit "Første gang" - Første gang er jo bruger.prototype.flink = "ja";

Ergo vil første gang altid være ja - Anden gang kan du vælge at overskrive med "ok godt så"....
Avatar billede telemuzen Nybegynder
17. februar 2003 - 11:52 #15
jes, så har jeg forstået..

Det her eksempel, kunne f.eks bruges til dårlige betalere, så fra starten er alle "gode betalere", men hvis de ikke betaler kan man overskrive dem som "dårlige betalere"?
Har jeg forstået det rigtigt?

Martin/
Avatar billede nikolajdu Nybegynder
17. februar 2003 - 12:28 #16
Lige præcis :))
Avatar billede telemuzen Nybegynder
17. februar 2003 - 12:46 #17
kanon...jeg læser lige artiklen fra actionscript.org.
Avatar billede barklund Nybegynder
17. februar 2003 - 13:03 #18
Under prototypen er det endnu mere anvendeligt at gemme funktioner:

bruger = function (navn, efternavn) {
    this.navn = navn;
    this.efternavn = efternavn;
};
bruger.prototype.flink = "ja";
bruger.prototype.getName = function() {
    return this.efternavn+", "+this.navn;
}
// kan bruges hvis vi vil initialisere alle brugere til at være flinke fætre
nikolajdu = new bruger("nikolaj", "ankjær");
telemuzen = new bruger("tele", "muzen");

trace(nikolajdu.getName()); // "ankjær, nikolaj"
trace(telemuzen.getName()); // "muzen, tele"
trace(new bruger("morten","barklund").getName()); // "barklund, morten"
Avatar billede telemuzen Nybegynder
17. februar 2003 - 13:16 #19
Barklund>> Når du tilføjer dig selv som ny bruger, findes du så også oppe ved mig og nikolaj(variablerne over trace), eller findes du kun i det øjeblik man tracer?
Jeg mener hvis man skal tilføje nye brugere, kan man så gøre det via
trace (new bruger("morten","barklund").getName()); // "barklund, morten"

Eller skal man tilføje brugeren oppe ved:
nikolajdu = new bruger("nikolaj", "ankjær");
telemuzen = new bruger("tele", "muzen");

Martin/
Avatar billede barklund Nybegynder
17. februar 2003 - 14:03 #20
Hvad mener du helt præcist med at "tilføje en bruger"?

Ja, der bliver lavet en instans af klassen "bruger", men da den ikke bliver gemt i nogen variabel, så lever den kun mens scriptet udføres og "dør" herefter, da den ikke er gemt...

De to andre instanser (nikolaj og tele) bliver gemt i en variabel hver, så disse kan hentes frem senere...
Avatar billede telemuzen Nybegynder
17. februar 2003 - 14:08 #21
ok... det var det jeg mente, med at tilføje en bruger..

De to andre instanser (nikolaj og tele) bliver gemt i en variabel hver, så disse kan hentes frem senere...

Og hvis der skal nye instancer, skal de oprettes her.
Avatar billede barklund Nybegynder
17. februar 2003 - 14:30 #22
Jeg kan ikke lide, at du siger "her", for de skal jo ikke nødvendigvis defineres på de samme linier i koden - de skal bare gemmes i en variabel:

trace ((barklund = new bruger("morten","barklund")).getName()); // "barklund, morten"

Så bliver den gemt i variablen "barklund" og med det samme brugt til at kalde "getName()"...
Avatar billede telemuzen Nybegynder
17. februar 2003 - 14:51 #23
ja, men trace functionen virker jo kun i Flash, så der er vel intet formål med at lave en bruger i
trace((barklund = new bruger("morten","barklund")).getName()) eller?

Så bliver den gemt i variablen "barklund" og med det samme brugt til at kalde "getName()"...

Når den er brugt findes den ikke mere!?
Det er det jeg mener med at der ikke er noget formål med at lave en trace command, men hvis den defineres sammen med (nikolaj, tele) så kan man bruge den.

Håber du forstår min menning.

Martin/
Avatar billede mat Nybegynder
17. februar 2003 - 16:02 #24
trace er et debugging feature og bliver bare brugt for at illustrere objekterne og deres metoder i denne sammenhæng - traces bliver fjernet i den kompilerede swf (så hut jeg visker) - du skal ikke ligge så meget i det :)
Avatar billede telemuzen Nybegynder
17. februar 2003 - 16:07 #25
mat>> tak for indlægget, så ved jeg det, mente nok at det var sådan.

Jeg skal bare lige have bekræftet mit sidste indlæg.

Martin/
Avatar billede barklund Nybegynder
17. februar 2003 - 19:45 #26
mat >> traces bliver kun fjernet, hvis du klikker "Omit Traces" til i Publish Settings - den almindelige player ignorerer dem dog, men debugging playeren kigger skam på dem...
Avatar billede mat Nybegynder
17. februar 2003 - 20:07 #27
nåja det var sådan det var skruet sammen :)

(men jeg fjerner dem alligevel selv undervejs :)
Avatar billede petemc Nybegynder
24. marts 2003 - 22:46 #28
http://www.macromedia.com/devnet/mx/flash/articles/actionscript2.html
Den her må være den beste forklaring jeg har læste, i forhold til MX. Jeg købte bøgen før jeg fandt denne link på nettet. Colin Moock er fantastisk til at forklare OOP, i hvert fald hvis man har engelsk som første sprog, som mig. Undskyld min bad-ass dansk grammer ;oP
Avatar billede telemuzen Nybegynder
11. februar 2004 - 16:47 #29
Hovsa, skal vist lige rydde lidt op i gamle spg.

Vil pyroman, barklund og nikolajdu ligge et svar ; -)

Og jeg siger tak for hjælpen..

Martin/tele
Avatar billede nikolajdu Nybegynder
11. februar 2004 - 18:01 #30
Ja den var vidst gammel - Har i øvrigt sendt dig en mail.
Avatar billede pyroman Nybegynder
11. februar 2004 - 18:40 #31
hehe... tror også hellere selv jeg må tjekke efter i mine egne spm...
Avatar billede pyroman Nybegynder
11. februar 2004 - 18:41 #32
Og hvis du absolut vil have et svar...
Avatar billede telemuzen Nybegynder
11. februar 2004 - 18:43 #33
Ja, har også lige et par stykker mere som skal afsluttes ; -D

M
Avatar billede barklund Nybegynder
15. februar 2004 - 14:10 #34
Det var en lang en - men jeg kommer vist lidt for sent ;)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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