peterS.: Vererbung in JavaScript

Beitrag lesen

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:]