molily: Typecasting

Beitrag lesen

Meine Basisklasse hat eine Methode "clone()", die eine Kopie der aufrufenden Instanz erzeugt. Meine abgeleitete Klasse ergänzt einige Funktionalitäten. Wenn ich nun "clone()" von einer Instanz der abgeleiteten Klasse aufrufe erhalte ich eine Instanz der Basisklasse, aber ich würde gerne die Methoden der speziellen Klasse verwendbar machen.

Das kapiere ich nicht. Dann schreibe clone() halt um, damit sie nicht immer den Konstruktor der Basisklasse, sondern den jeweiligen Konstruktor verwendet. Den jeweiligen nimmst du aus this.constructor, dazu setzt du die Eigenschaft schließlich. Diese liefert dir für die abgeleitete Klasse den Konstruktur eben dieser.

Beispiel:

// Zwei Helferfunktionen aus [link:http://molily.de/weblog/javascript-pseudoklassen]  
  
Object_create = Object.create || function (o) {  
   var F = function() {};  
   F.prototype = o;  
   return new F();  
};  
  
function inheritPseudoClass (Super, Sub) {  
   Sub.prototype = Object_create(Super.prototype);  
   Sub.prototype.constructor = Sub;  
}  
  
function Base (name) { this.name = name; }  
  
Base.prototype.clone = function () {  
  return new this.constructor(this.name);  
};  
  
function Inherited (name) {  
  Base.apply(this, arguments);  
}  
  
inheritPseudoClass(Base, Inherited);  
  
var inherited = new Inherited('bar');  
var clone = inherited.clone();  
alert(clone instanceof Base);  
alert(clone instanceof Inherited);  
alert(clone.name);

Mathias