Zugriff auf Elternklasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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().

    Kommentar


    • #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...

      Kommentar


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

        Kommentar


        • #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!

          Kommentar

          Lädt...
          X