Lad os fortsætte med at se,
hvad vi kan gøre med objekter.
Vi er tilbage med det program
vi brugte i modulet om funktioner.
Dette program har funktionen 'drawWinston'
som kan tegne Winston
ved visse x'er og y'er.
Her kalder vi 'drawWinston' fire gange.
Hver gange med et forskelligt
sæt af x- og y-koordinater.
Du kender mig jo.
Når jeg ser disse fire kald
på 'drawWinston',
der ser så ens ud,
så tænker jeg straks på,
hvor meget bedre det ville
være at bruge en løkke
og kalde den én gang inde i løkken
og ændre x og y i hvert
af løkkens gennemløb.
For at gøre det skal vi gemme disse
x- og y-positioner i et array,
som kan gennemløbes.
Vi har to sæt af værdier,
så vi kan lave to arrays.
Et for x-positionerne og
et for y-positionerne.
Vi taster
>var xPositions = [99, 294, 101, 294];< og
>var yPositions = [117, 117, 316, 316];<
Nu kan vi gennemløbe disse
ved at bruge en for-løkke.
>for (var i = 0; i < xPositions.length; i++)<
som gennemløber hvert element i xPositions
og vi tegner Winston med
>drawWinston(xPositions[i], yPositions[i]);<
Okay, lad os se om det virker,
når vi sletter dette.
Okay, det virker.
Nu har vi denne ene linje med kode,
der tegner Winston
og gør det i hver position
i arrayet xPositions.
Vi kan tilføje flere positioner
ved at skrive 10 og 1
og 1 og 1
og 100 og 1.
Det begynder at se lidt rodet ud,
og det kan jeg ikke lide,
da det er svært at se,
hvilket x der hører til hvilket y.
Det skal være nemt at se mine x og y par
uden jeg skal forsøge at skrive dem
under hinanden på denne måde.
Jeg vil gerne gemme disse
positioner på en anden måde.
En ide er i stedet at gemme dem i objekter
da hver position består af
to informationer, x og y.
Vi kan lave et objekt
med egenskaberne x og y.
Og dernæst kan vi have et array af
objekter med disse x- og y-positioner.
Lad os gøre det.
Vi taster >var positions = [];<
da det skal være et array,
men i stedet for
at hvert element er et tal,
så skal det være et objekt.
Vi bruger derfor {} og
indsætter x: 99, y: 117.
Nu har vi en af vores positioner.
Vi kan tilføje endnu en
>{x: 294, y: 117},<
hvor x er 294 og y er 117.
Den tredje er>{x: 101, y: 316},<
og den sidste er >{x: 294, y: 316},<.
Nu har vi et array af objekter,
hvor hvert objekt har egenskaberne x og y.
Hernede i vores for-løkke ændrer vi
den til at gennemløbe positions.length
og så indsætter vi objektet.
Lige nu er det hele objektet,
men vi skal bruge x og y,
så vi skal ændrer det til
position[i].x og positions[i].y
Sådan!!!
Nu kan vi fjerne disse
gamle kludrede arrays.
Flot.
Dette ser, for mig, meget pænere ud
og gør koden meget nemmere at læse.
Og når vi har mere læsbar kode,
så er det godt.
Det gør det også nemmere at tilføje noget.
Jeg tilføjer x y parret samlet.
Lad os sige >{x: 200, y: 200},<
og jeg får en Winston i midten.
Sejt.
Nu vil jeg vise dig noget,
der er endnu mere smart.
Bemærk at vores funktion lige nu
accepterer to tal
og dernæst bruger disse to tal.
Vi kan ændre vores funktion,
så den forventer et objekt
og får x og y fra dette objekt.
Hernede skal vi blot have
objektet positions[i]
Lad os prøve det.
Vi bruger vores objekt,
men nu virker det ikke.
Det er fordi vores funktion stadig
forventer to argumenter,
og den får kun ét.
Så vi ændrer funktionen til
kun at få 'facePosition'.
Nu får vi fejlen faceX er ikke defineret,
fordi vi før brugte faceX som et argument,
men nu eksisterer det ikke.
i stedet har vi et objekt.
Det vi gør er, at gemme x positionen
fra objektet i variablen faceX.
Vi har dette objekt og
objektet har egenskaben x,
så vi gemmer den i variablen faceX.
Og så gør vi det samme for y,
og taster >faceY = facePosition.y<.
Sådan.
I resten af funktionen bruges
faceX og faceY.
Vi skal sikre os, at de er stavet korrekt,
hvis vi brugte xx, så virker det ikke,
da det ikke er det, der står hernede
i vores array af objekter.
Det skal passe sammen.
Men det er ret smart.
Du kan have et array af objekter.
Du kan have funktioner,
der bruger objekter.
Du vil opdage at dine programmer bliver
ret smarte på grund af den måde
de strukturer deres data.
Da du så tit har x og y, der hører sammen,
så vil du opdage, at de især er nyttige i
dine grafik og animationsprogrammer.
Så kom bare i gang og ha' det sjovt.