Extend en klasse - del 1: Grundstrukturen til et SuperArray

En af de ting som jeg tit har brug for rundt omkring i min kode, er en funktion som kan returnere et tilfældigt element fra et array.
Så hvorfor ikke lave en ny klasse der kan hjælpe med det, og som kan være grundlag for en lille artikelserie her på omFlash?

First things first
Hovedparten af alle klasserne i ActionScript 3 kan extendes, det vil sige at man laver en ny klasse som tager udgangspunkt i en af de eksisterende.
I dette tilfælde er det oplagt at tage udgangspunkt i den eksisterende Array-klasse, sådan så man ikke skal bruge tid på at skrive logik til alle de eksisterende funktioner som eksempelvis push, pop m.fl. men kan koncentrere sig om at tilføje ny funktionalitet.

Så, derfor kunne den første skabelon se sådan ud:


package {
	dynamic public class SuperArray extends Array {
	}
}

Constructor
Alle klasser har en constructor funktion, som er den funktion der automatisk kaldes når man laver en ny instance af sin klasse.
I dette tilfælde, hvor vores nye klasse hedder SuperArray, ville koden se sådan ud:

var Super_arr:SuperArray = new SuperArray();

Constructor funktionen er altid en public function inde i klassen som hedder det samme som klassen, hvilket gør at vores klasse nu ser sådan her ud:


package {
	dynamic public class SuperArray extends Array {
		//Constructor funktion
		public function SuperArray() {
			trace("nu er jeg oprettet!");
		}
	}
}

For et array gælder der dog det specielle, at man ofte gerne vil oprette arrayet med værdier fra start, eksempelvis sådan her:

Hvis vores nye SuperArray skal have samme funktion, så skal vores constructor udvides så den også kan modtage nogle parametre, og så ser hvor klasse sådan her ud:


package {
	dynamic public class SuperArray extends Array {
		//Constructor funktion
		public function SuperArray(... optionalArgs) {
			for each (var value:* in optionalArgs){
				this.push(value);
			}
		}
	}
}

Note: Hvis du undrer dig over hvad stjernen betyder (*), så er det fordi at man ikke på forhånd kan vide hvilken type parametre der skal modtages.
Det kan være strings som i eksemplet med dyrene, men der kunne lige så godt være tale om movieclips, tal - ja, hvad som helst.

Nu har vi et SuperArray der kan præcis det samme som et standard Array - for vildt - nu er det så tid til at udvide det!

Og det gør vi i del 2 som kommer i morgen.



Del:These icons link to social bookmarking sites where readers can share and discover new web pages.
  • del.icio.us
  • digg

Skriv en kommentar