Toon posts:

[Flash] Hoe diep kun je prototypen?

Pagina: 1
Acties:

Verwijderd

Topicstarter
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*diepte test*/
test1 = function (){
}
test1.prototype = new Array
test1.prototype.getValue = function (){ 
}
test1.prototype.setValue = function (){
}

test2 = function (){
}
test2.prototype = new test1 
test2.prototype.getList = function (){  
}
test2.prototype.setList = function (){
}

test3 = function (){
}
test3.prototype = new test2 
test3.prototype.getWorld = function (){ 
}
test3.prototype.setWorld = function (){
}

test4 = function (){
}
test4.prototype = new test3 
test4.prototype.getSpace = function (){ 
}
test4.prototype.setSpace = function (){
}


als ik van de bovenstaande code de output bekijk zie ik dit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Level #0:
Variable _level0.$version = "WIN 6,0,79,0"
Variable _level0.test1 = [function] {
    prototype:[object #2, class 'Array'] [
      getValue:[function 'getValue'],
      setValue:[function 'setValue']
    ]
  }
Variable _level0.test2 = [function] {
    prototype:[object #6, class 'Array'] {
      getList:[function 'getList'],
      setList:[function 'setList']
    }
  }
Variable _level0.test3 = [function] {
    prototype:[object #10] {
      getWorld:[function 'getWorld'],
      setWorld:[function 'setWorld']
    }
  }
Variable _level0.test4 = [function] {
    prototype:[object #14] {
      getSpace:[function 'getSpace'],
      setSpace:[function 'setSpace']
    }
  }


Object test3 en test4 hebben geen Class meer. terwijl ze gebasseerd zijn op test2 die dus wel een Class heeft.

Ga ik gewoon te diep of doe ik nu iets grandioos fout 8)7

  • tie-rep
  • Registratie: Oktober 2001
  • Laatst online: 19-02 15:56

tie-rep

nu met ir. !

volgens mij is het idee van een class dat je maar één level diep gaat met je 'prototype'.

Als je dan toch een 'kopie van kopie' maakt, dan houdt het een keertje op.
Dus waarschijnlijk toch maar zoeken naar andere oplossing...

Verwijderd

Topicstarter
Tot nu toe nooit nodig gehad, zo diep werken. maar tot op het moment dat het per ongeluk gebeurde. Dit arikel gaat er een beetje op in, maar ik kan er niet echt uit halen hoe diep je kan gaan.

Maar ik concludeer dus maar 2 keer instancieren, wel een leuke fact om te weten iig.

[ Voor 6% gewijzigd door Verwijderd op 22-08-2003 17:14 ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

je maakt geen subklasse aan maar een referentie op regel 12, 20 en 28.

"You're only as good, as what you did last week."


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Flash ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
a = function() {
    this.say = function() {
        trace("This is A!");
        }
}

b = function(){};
b.prototype = new a(); // set up inheritance
b.prototype.who = function() {
    trace("I am B!" );
}

c = function(){};
c.prototype = new b(); // set up inheritance
c.prototype.why = function() {
    trace("Because i can in C!");
}

var myA = new a();
myA.say(); // method in self

trace( newline );

var myB = new b();
myB.say(); // method in parent
myB.who(); // method in self

trace( newline );

var myC = new c();
myC.say(); // method in grandparent
myC.who(); // method in parent
myC.why(); // method in self


voila...multilevel inheritance. grandparent -> parent -> child.

[ Voor 5% gewijzigd door oh,when? op 22-08-2003 18:44 ]

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
Oke, dat werkt idd, maar je heb nu een basis die niet op een AS Object gebasseerd is maar op een zelf gemaakte class "a".

Nu kwam ik dit probleem eigenlijk tegen met Movieclips (of wel components).

Hoe doe je het dan, want als ik jouw code pak en vervang "new a();" met "new MovieCLip();" dan ziet de output er toch weer raar uit (het derde kind heeft de Class niet meer).

Overings doet hij het dan wel (ook vreemd), maar in een movieclip-component werken de movieclip eigenschappen niet meer.

Ik kwam het met de volgende constructie tegen

FormElement -> input -> inputfield

of te wel formelement is de basis van alle formulieren, daarop gooi ik input mogelijkheden en daarna maak ik er of een inputfield of een textarea van.

[ Voor 27% gewijzigd door Verwijderd op 22-08-2003 19:04 ]


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Om met new Dinges(); vanuit een frame een instantie van een object gedefinieerd in de librarary ergens neer te mikken is mij nog niet gelukt :{ wat ik dan doe (maar dat is vast fout ;)) is het component in de library gewoon een linkage geven, en met attachMovieClip een instantie maken.
Je component kan dan gewoon prototypen vanaf new MovieClip(); en subclasses daar weer op.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Verwijderd

Topicstarter
Clay zoals jij het aanpakt doe ik het ook. Helaas kun je niet een Linkage aanmaken in runtime.

Ik heb een testcase gemaakt met een proto chain van 4 diep, en ondanks dat "ctrl-alt-v" een output geeft die niet klopt werkt het wel :p

http://www.devigner.com/prototytpe/test1.fla

de output ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Variable _level0.test1 = [function] {
    prototype:[object #2, class 'MovieClip'] {
      helloCity:[function 'helloCity']
    }
  }
Variable _level0.test2 = [function] {
    prototype:[object #5, class 'MovieClip'] {
      helloCountry:[function 'helloCountry']
    }
  }
Variable _level0.test3 = [function] {
    prototype:[object #8] {
      helloWorld:[function 'helloWorld']
    }
  }
Variable _level0.test4 = [function] {
    prototype:[object #11] {
      helloSpace:[function 'helloSpace']
    }
  }


zoals je ziet is test3 en test4 "class"-loos. Maar dat zijn ze dus niet :)

het ziet er dus naar uit dat er geen einde is (ten minste tot zo ver getest).
Pagina: 1