kani: Objektmethode benötigt Wert vom Objekt, aber wie?

Hi,

Ich habe eine Methode in einem Objekt und in dieser Methode brauche ich einen Wert aus dem Objekt. Ich weiß nicht, wie ich aus der Funktion wieder hoch ins Objekt komme, um den Wert von dort rauszufinden.

Mein Objekt:

function xWindow(position) {
  this.position = position;

this.maximize = document.createElement("img");
  /* Hier wird ein Symbol eingebunden, das bei onclick eine Funktion auslösen soll. */
  [...]

this.maximize.onclick = function() {
    /* HIER bräuchte ich den Wert aus "position".
       Wie kriege ich den? Ich kann zb. myWindow0.position kriegen, aber ich brauche immer den Wert aus dem aktuellen Objekt.
    */
    var pos = this.position; // Geht nicht
    var pos = constructor.position; // <- Geht natürlich nicht :) Ich habs trotzdem mal probiert
  }
}

init() {
  myWindow0 = new xWindow(200);
  myWindow1 = new xWindow(123);
  myWindow2 = new xWindow(987);
}

  1. Liebe(r) kani,

    var pos = this.position; // Geht nicht

    ich habe keine Ahnung, aber spontan würde ich einmal this.this.position probieren...

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. hi,

    Ich habe eine Methode in einem Objekt und in dieser Methode brauche ich einen Wert aus dem Objekt. Ich weiß nicht, wie ich aus der Funktion wieder hoch ins Objekt komme, um den Wert von dort rauszufinden.

    Normalerweise brauchst du nicht wieder "hoch ins Objekt" kommen - per this.eigenschaftname public deklarierte Eigenschaften stehen dir unter genau diesem Bezeichner wieder zur Verfügung.

    Hier liegt der Fall aber aus einem Grund anders:

    this.maximize.onclick = function() {

    Diese Funktion wird im Kontext des HTML-Elementobjektes, auf welches this.maximize zeigt, aufgerufen - und deshalb verweist this in der Methode auf dieses HTML-Elementobjekt, und nicht auf deine Instanz der Javascript-Klasse.

    /* HIER bräuchte ich den Wert aus "position".
           Wie kriege ich den? Ich kann zb. myWindow0.position kriegen, aber ich brauche immer den Wert aus dem aktuellen Objekt.
        */
        var pos = this.position; // Geht nicht
        var pos = constructor.position; // <- Geht natürlich nicht :) Ich habs trotzdem mal probiert

    Wenn es gar nicht erforderlich ist, dass die Eigenschaft die Sichtbarkeit public besitzt - dann lege sie mit Sichtbarkeit private an, in dem du sie im Objekt nicht mit this.position deklarierst, sondern mit var position.
    (Bzw. da position als Parameter bei der Erzeugung des Objektes mitgegeben wird, sollte dir position sowieso überall zur Verfügung stehen.)

    Wenn private aus irgendwelchen Gründen keine Option darstellen sollte, und du public benötigst - dann kannst du dir auch damit behelfen, dass du dem Objekt eine auf es selber verweisende Eigenschaft verpasst:

    function xWindow(position) {  
      var self = this;  
      this.position = position;  
      //...
    

    self mit der Sichtbarkeit private steht dir dann auch in der Methode this.maximize.onclick, die wie schon erwähnt im Kontext des HTML-Elementobjektes ausgeführt wird, zur Verfügung - d.h., auf die Eigenschaft, auf die du ausserhalb dieser Methode mit this.position zugreifen kannst, kannst du innerhalb dieser über self.position zugreifen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Danke an wahsaga und Mathias, das hat mir beides geholfen. Sonst meckert wahsaga immer :) Diesmal Danke!

  3. Hallo,

    Dieser SELFHTML-Artikel beschäftigt sich mit der Problematik:
    http://aktuell.de.selfhtml.org/artikel/javascript/organisation/#methoden-eigener-objekte-und-kontext

    Mathias