Inheritance in javascript
This post was originally published on Coding Glamour.
Inheritance in javascript blijf verdomd moeilijk, zoals ik deze week weer
tegenkwam toen ik een vriend hielp in het porten van wat AS3 code naar
javascript. Vandaar wat ready to use code snippets en een kleine uitleg
om inheritance toe te passen.
Javascript kent een aantal manieren om code te mixen, maar ze zijn globaal
onder te verdelen in inheritance en mixins. Inheritance is prettig voor een object structuur
die je in een taal als Java of C# zou schrijven. Single inheritance van
classes, als in Object->GameObject->Person->Enemy. Elk van de
parent classes zou ook los kunnen bestaan, en de classes mogen zelf state bijhouden.
Mixins hebben meer weg van abstracte classes, en zijn bedoeld om behavior te
laten erven, sla er dus geen state in op want dan loop je tegen scoping
issues aan. Je kunt meerdere mixin's in 1 object mixen voor multiple-inheritance-like
behavior.
Inheritance
Allereerst lenen we wat code uit node.js. Omdat deze functie afhankelijk is van Object.create
voegen we deze toe aan browsers die deze nog niet hebben middels een workaround
van Ben Newman.
Nu kunnen we een object hierarchie bouwen, waarin we een Parent en een
Client hebben:
Geen scoping problemen hier en instanceof werkt als verwacht:
Mixins
Voor een mixin hoeven we geen code te lenen, maar kunnen we gewoon gaan
typen. Neem twee simpele constructors:
De mixin hoeft niets te weten van de objecten die hem gaan importeren,
het enige wat hij verwacht is dat er ergens een 'name' property
op het object zit:
Nu kunnen we de 'greeter' in de twee types mixen en daarna aanroepen:
Code die je bijvoorbeeld in je types kan mixen zijn: logging functies
en EventEmitter-achtige constructies.
Conclusie
Wil je state inheriten: inheritance. Wil je behavior inheriten:
mixins.
There are 8 comments on this article, read them on Coding Glamour.