ik weet niet of dit al wijd bekend is, maar ik heb het zojuist uitgevonden en daarbij had ik weing hulp van GoT topics, dus er is zeker weinig of nooit over gesproken hier.
Het gaat dus over het simuleren van inheritance in js. De meesten van jullie weten wel hoe je hele classes kan overnemen van een al bestaande class, namelijk door het prototype ervan over te schrijven:
nu heeft dus het object hond ook de method vertel. Je ziet al dat je in d constructor van het hondobject bezig bent met dezelfde properties toewijzen als in beest. Dat kan handiger, nl met de apply method:
dit is geloof ik allemaal wel ongeveer bekend, het staat ook vrij uitgebreid bescheven in de js oo tut van clay: http://www.xs4all.nl/~peterned/got/oojstuto.html
stel nu dat je voor het object hond de method vertel wilt uitbreiden, je kan dan gewoon de hele functie herdefinieren, maar als die erg veel lijkt op de method van beest is dat een beetje onzin. in bijvoorbeeld een programmeertaal als delphi kan je gewoon de hele method terugroepen met inherit. Naar iets dergelijks was ik ook op zoek binnen js.
doet het 'm
wat de apply method (van een functie) eigenlijk doet is die functie aanroepen binnen de context van het eerste argument van apply. dit is het object waarnaar elke this in de originele functie naar verwijst. het tweede argument is een array van vars die doorgegeven wordt aan die functie.
Het gaat dus over het simuleren van inheritance in js. De meesten van jullie weten wel hoe je hele classes kan overnemen van een al bestaande class, namelijk door het prototype ervan over te schrijven:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
| function beest(kleur) { this.kleur = kleur; } beest.prototype.vertel = function() { alert(this.kleur); } // nieuw child object function hond(kleur,ras) { this.kleur = kleur; this.ras = ras; } hond.prototype = new beest(); |
nu heeft dus het object hond ook de method vertel. Je ziet al dat je in d constructor van het hondobject bezig bent met dezelfde properties toewijzen als in beest. Dat kan handiger, nl met de apply method:
JavaScript:
1
2
3
4
| function hond(kleur,ras) { this.ras = ras; beest.apply(this,arguments); } |
dit is geloof ik allemaal wel ongeveer bekend, het staat ook vrij uitgebreid bescheven in de js oo tut van clay: http://www.xs4all.nl/~peterned/got/oojstuto.html
stel nu dat je voor het object hond de method vertel wilt uitbreiden, je kan dan gewoon de hele functie herdefinieren, maar als die erg veel lijkt op de method van beest is dat een beetje onzin. in bijvoorbeeld een programmeertaal als delphi kan je gewoon de hele method terugroepen met inherit. Naar iets dergelijks was ik ook op zoek binnen js.
JavaScript:
1
2
3
4
| hond.prototype.vertel = function() { beest.prototype.vertel.apply(this, arguments); alert(this.ras); } |
doet het 'm
wat de apply method (van een functie) eigenlijk doet is die functie aanroepen binnen de context van het eerste argument van apply. dit is het object waarnaar elke this in de originele functie naar verwijst. het tweede argument is een array van vars die doorgegeven wordt aan die functie.