Op vrijdag 02 november 2001 02:06 schreef mbravenboer het volgende:
Op zich leuk gevonden, maar of het echt bruikbaar is?
In principe kan je in vrijwel elke general-purpose programmeertaal wel object-georienteerd programmeren. Zelfs in functionele talen kan je nog een object-georienteerde manier werken (net als dat je in een OO-taal ook functioneel kunt werken

). Maar voor een echt zinnig gebruik moet de taal object-georienteerd werken ook aantrekkelijk maken.
Ik ken deze aanpak helaas te slecht om er echt iets over te kunnen zeggen, maar toch een aantal punten:
0. Als je een 'klasse' een 'methode' wilt geven, kan deze dan van de instantie variabelen gebruik maken zonder dat de referentie van het object meegegeven hoeft te worden? Zo nee -> OO is een hack zoals OO-gebruik in alle niet OO-talen.
Dat kan. Een object defineer je gewoon als function, maar een new object() wordt wel degelijk een instantie van die functie. Het refereren naar andere methoden en variabelen van het object binnen object specifieke functies zal je echter altijd met this.variabele of objectNaam.variabele moeten doen.
1. Overerving is aardig, maar hoe zit het met overriding? Geen overriding -> slechte mogelijkheden voor specialisatie
Javascript is een Object Based taal

niet Object Oriented. Overriding kan idd niet, en ik denk dat jij het verschil tussen object based en object oriented beter weet dan ik

Het aantal argumenten van een functie is niet belangrijk, en er wordt niet op gechecked door js. 2 functies met dezelfde naam kan ook niet, omdat alles in js (in een of andere vorm, ik dacht dat een functie gewoon een instantie is van het object Function) een object is, en 2 objecten met dezelfde naam kan niet.
2. Verwijst de self reference (this) van een 'object' ook naar de echte instantie van het object? Als je een methode aanroept op de this reference, werkt overriding dan?
this. verwijst idd naar de instantie van het gedefineerde object. En als je dus methodes binnen object specifieke methodes aanroept met this.methode() blijf je binnen dat object werken.
3. Geen interfaces
4. Geen abstracte methoden
5. Geen groepering van functionaliteit (methoden)
3 en 4 zeggen mij vrijwel niets

maar groepering van functionaliteiten kan opzicht (denk ik, als dat het is iig) wel. je kan object specifieke methodes namelijk ook BINNEN de object methode defineren, al moet je nog wel een referentie zetten:
code:
1
2
3
4
5
6
7
8
9
10
11
| function myObject(id) {
this.id = id;
this.manipuleer = manipuleer;
function manipuleer() {
alert(this.id);
}
}
dinges = new myObject('oi');
dinges.manipuleer(); |
Nadeel hiervan is wel dat die referentie voor elke instantie van het object opnieuw gezet wordt, en met veel object methoden is dit veel trager dan met prototype.
6. Runtime type informatie?
Tot op zekere hoogte is daar veel mee te doen. Je kan bijvoorbeeld je eigen console object maken, met een window en een textarea, en vervolgens events vangen.
window.onerror bijvoorbeeld kan je een functie aanhangen, die krijgt standaar 3 argumenten mee dan, de fout, de regel waarin het fout ging, en het bestand waarin het fout ging.
Ook kan je al je methode code in try {} catch(error) {} constructies plaatsen. De error die daaruit komt is een wazig object waarmee je met een trucje alle info kan uitlezen.
Maar hoe ingewikkeld wil je je js maken dat je dit soort kunstgrepen nodig hebt?

Om het even samen te vatten:
Het is aardig gevonden dat je dit op deze manier kunt implementeren in javascript, maar zoals altijd geldt bij alle talen: een taal functioneert alleen goed als je hem gebruikt op de manier zoals hij bedoelt is. Op deze manier is javascript (denk ik) niet bedoeld en dus werkt het niet prettig. Het blijft dus een nep-OO-implementatie zoals je ook in veel andere niet-OO-talen kunt doen.
Maar het is wel een erg leuk experiment en ik ben ook wel benieuwd hoever je kunt komen (zie m'n punten

).
Js is dus object Based, en tot op zekere hoogte is dit wel zo bedoeld, maar je moet het ook eigenlijk niet vergelijken met echte prog talen.