gruss Christian S.
ich habe eine Basisklasse in JavaScript:
function Base() {
/*
so weit so gut -
das hier ist Dein: [[Base]]-konstruktor.
umgangssprachlich kannst Du das ding auch ruhig als
Klasse bezeichnen, obwohl immer mal wieder darauf
hingewiesen sein soll, dass JavaScript klassenlos ist -
es gibt nur objekte. diese koennen von konstruktoren
erzeugt werden, muessen es aber nicht.
vererbung erfolgt zum einen ueber das [prototype]-objekt,
sofern dieses vorhanden ist (bei reinen objekten - z.b.:
var obj = {}; - muss diese eigenschaft ausdruecklich
gesetzt werden).
maechtiger noch ist in JavaScript das konzept der
schnittstellenvererbung. das [[Function]] objekt
des Sprachkerns stellt die beiden methoden [apply]
und [call] fuer diese art (kontextabhaengiger)
delegation zur verfuegung.
*/
}
> ...
> ~~~javascript
Base.prototype.myFunction = function () {
/*
stil:
es gibt zwar keine zwingende schreibstil-konvention,
trotzdem sollte man grosse anfangsbuchstaben nur fuer
konstruktoren verwenden.
*/
> };
...
var myObject = {};
myObject.WeitereProperty = true;
// myObject.weitereProperty = true; // siehe oben.
> ...
> Später möchte ich einfach myObject.Myfunction() aufrufen können.
>
> kann ich das so irgendwie machen:
>
> myObject.prototype = Base;
du warst nah dran, fuer Deine zwecke muss der [prototype] aber
kein konstruktor sein, sondern ein durch diesen konstruktor
erzeugtes objekt:
~~~javaScript
myObject.prototype = new Base(); // manche schreiben auch ...
myObject.prototype = new Base; //, was auch nicht falsch ist.
by(t)e by(t)e - peterS. - pseliger@gmx.net
»Because objects in JavaScript are so flexible, you will want to think differently about class hierarchies.
Deep hierarchies are inappropriate. Shallow hierarchies are efficient and expressive.« - Douglas Crockford
ie:( fl:) br:> va:( ls:& fo:) rl:| n3;} n4:} ss:} de:µ js:} mo:? zu:]