Avatar billede jakwag Nybegynder
15. december 2002 - 18:07 Der er 5 kommentarer og
1 løsning

prototype

Hej eksperter

Er der nogen her der kan forklare mig hvad prototype bruges til og hvordan den lige fungere?

Jeg er rimelig godt inde i action scripting, men prototype giver umiddelbart ikke meget mening for mig.

eks:
myFunction.prototype = whatEver;

Jakwag
Avatar billede barklund Nybegynder
15. december 2002 - 18:34 #1
Puha... Det er et stort emne... Men det kommer sig af, at alt i flash er objekter, og objekter kan så bestå af funktioner eller variabler, som man nu ønsker det, fx:

myObject = new Object();
myObject.myFunction = function(a) { trace(a); }

Så kan man kalde funktionen

myObject.myFunction("hejsa");

Og få tracet resultatet... Det er også fint nok, men hvad nu hvis, man ønsker at have flere objekter, der er ens - kan man så "klone" ovenstående objekt, eller...?

Nej, man laver en "funktion", som er stam-objektet:

myObjectClass = function() {}
myObjectClass.myFunction = function(a) { trace(a); }

Nu kan man så lave en instance af klassen og kalde funktionen:

myTestObject = new myObjectClass();
myTestObject.myFunction("hejsa igen");

Get it?

Man kan nu lave tusindvis af instances af ovenstående klasse, men problemet er, at for hver instance kommer den til direkte at indeholde definitionen af ovenstående funktion - det ville svare til at hvert eneste array havde sin egen definition af pop() og så videre - meget uhensigtsmæssigt...

Derfor kan man lægge funktion i klassens prototype, som er den stamklasse, som alle objekter der er instanser af klasser "arver" funktioner fra:

myObjectClass = function() {}
myObjectClass.prototype.myFunction = function(a) { trace(a); }
myTestObject = new myObjectClass();
myTestObject.myFunction("hejsa nr. 3");

Hvis man siden hen vil lave om på definitionen af funktionen, så kan det gøres uden at man behøver gøre noget ved objekterne;

myObjectClass.prototype.myFunction = function(a) { trace("output: "+a); }
myTestObject.myFunction("hejsa nr. 4");
Avatar billede barklund Nybegynder
15. december 2002 - 18:38 #2
Hovsa... Vi fortsætter lige... Det kan så udvides ret langt med lokale variabler... Se nedenstående eksempler:

Vector = function(x,y) {
    this.x = x;
    this.y = y;
}
Vector.prototype.length = function() {
    return Math.sqrt(x*x+y*y);
}
Vector.prototype.angle = function() {
    return Math.atan2(y,x);
}
myVector = new Vector(3,4);
trace("length = "+myVector.length());
trace("angle = "+myVector.angle());

Man kan også lave funktione på eksisterende objekter:

Array.prototype.exists = function (value) {
    for (i in this)
        if (this[i] = value)
            return true;
    return false;
}

Håber det er nok til at komme i gang :o)

/Barklund
Avatar billede barklund Nybegynder
15. december 2002 - 18:39 #3
Hov... I array-funktionen skal der selvfølgelig være to "==" for at den virker... :o)
Avatar billede jakwag Nybegynder
15. december 2002 - 18:41 #4
Kanon

Tusind tak. Jeg skal lige tænke lidt over det, men jeg er sikker på at det kan få mig videre.
Avatar billede barklund Nybegynder
15. december 2002 - 19:19 #5
Tark for point... check eventuelt: http://www.debreuil.com/docs/ch01_Intro.htm
Avatar billede barklund Nybegynder
15. december 2002 - 20:51 #6
Rettere: check ikke "eventuelt" linket, men gør det under alle omstændigheder - debreuil's gennemgang er guld værd!
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