Zugriff auf Elternklasse

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf Elternklasse

    Ich habe momentan das Problem, das ich in JS aus einer Unterklasse auf Methoden der Elternklasse zugreifen muss, welche ich aber überschrieben habe. Arbeite mit Prototype. Das Beispiel, verdeutlicht das Problem glaube ich besser:
    PHP Code:
    var WebControl = Class.create();
    Object.extendWebControl.prototype, {
        
    initialize: function( element ) {
            
    // ...
        
    }
    } );

    var 
    ContextMenu = Class.createWebControl );
    var 
    tmp ContextMenu.prototype.initialize;
    Object.extendContextMenu.prototype, {
        
    __initializetmp,
        
    initialize: function( element ) {
            
    this.__initialize this.__initialize.bindthis );
            
    this.__initializeelement );
            
    // ...
        
    }
    } ); 
    Wie ihr seht, ist der Aufruf des Elternkonstruktors etwas wurstig. Entsprechend nerviger wird es bei noch tieferen Vererbungen. Ich hatte auch überlegt, mir den Prototyp des Elternobjektes in einem Member abzulegen, etwas so:
    PHP Code:
    ContextMenu.parent WebControl.prototype;
    // Aufruf:
    this.parent.initialize.callthiselement ); 
    Das gefällt mir aber alles nicht so wirklich.

    Liegt leider an diesem Prototyp-Muster. Doch irgendwie muss ich doch aus meinen überladenen Methoden an die Elternmethoden kommen Wie würdet ihr vorgehen?

  • #2
    Javascript kennt kein super oder parent, Methoden der Elternklasse ruft man mit parentClassname.prototype.methodName.call().

    Comment


    • #3
      Javascript kennt kein super oder parent, Methoden der Elternklasse ruft man mit parentClassname.prototype.methodName.call().
      So ist es. Und es scheint auch keinen Weg drumherum zu geben. Ich werde jetzt die Object.extend-Funktion von Prototyp erweitern, so dass meine abgeleiteten Klassen per this.parent auf den prototype der Elternklasse zugreifen. Mal schaun...

      Comment


      • #4
        WebControl.prototype.initialize.call() reicht nicht?

        Comment


        • #5
          WebControl.prototype.initialize.call() reicht nicht?
          Ich möchte es eigentlich vermeiden, den Namen der Elternklasse in Unterklassen zu verwenden.
          Ich sehe gerade, dass es in Prototype 1.6 eine solche Vererbung gibt
          PHP Code:
          var Animal = Class.create({
            
          initialize: function(namesound) {
              
          this.name  name;
              
          this.sound sound;
            },

            
          speak: function() {
              
          alert(name " says: " sound "!");
            }
          });

          // subclassing Animal
          var Snake = Class.create(Animal, {
            
          initialize: function($supername) {
              
          $super(name'hissssssssss');
            }
          }); 
          Allerdings werde ich aufgrund der Änderungen in der Hash-Klasse vorerst nicht auf 1.6 umsteigen. Vielleicht adoptiere ich diese Funktionalität, ich gucke mir das mal an!

          Comment

          Working...
          X