Bittermann: addEventListener soll Javascript objekt aufrufen

Hallo!

ich versuche bei addEventListener ein objekt ausführen zu lassen.
Und zwar ist das mein Objekt:

var meinObjekt = {  
  p1: 'test',  
  p2: 'test2',  
  
  init: function() {  
   alert(this.p1 + this.p2);  
 }  
  
}

davor habe ich das stehen:

window.addEventListener("load",meinObjekt.init,false);

doch dann sagt mir die Fehlerkonsole, dass meinObjekt nicht definiert ist. Wie schaffe ich es das zu realisieren oder bin ich gezwungen außerhalb des objekts meine funktion zu definieren?

mfg,
Bittermann

  1. [latex]Mae  govannen![/latex]

    ich versuche bei addEventListener ein objekt ausführen zu lassen.
    Und zwar ist das mein Objekt:

    var meinObjekt = {

    p1: 'test',
      p2: 'test2',

    init: function() {
       alert(this.p1 + this.p2);
    }

    }

    
    >   
    > davor habe ich das stehen:  
    >   
    > window.addEventListener("load",meinObjekt.init,false);  
      
    Wenn es \_davor\_ steht, existiert »meinObjekt« natürlich zu dem Zeitpunkt noch nicht. Rufe addEventListener erst \_nach\_ der Deklaration des Objektes auf.  
      
    Stur lächeln und winken, Männer!  
    Kai  
    
    -- 
    `var jQuery = $(hit);`{:.language-javascript}  
    I am Pentium of Borg. Division is futile. You will be approximated.  
      
    [SelfHTML-Forum-Stylesheet](http://selfhtml.knrs.de/#h_stylesheet)  
    
    
    1. Wenn es _davor_ steht, existiert »meinObjekt« natürlich zu dem Zeitpunkt noch nicht. Rufe addEventListener erst _nach_ der Deklaration des Objektes auf.

      Oha. Ich hatte das nämlich vorher in einer normalen Funktion. Da stand der eventlistener auch davor und es klappte. Da hab ich dann nicht mehr drauf geachtet. Dankeschöön :-)

      1. Hi,

        Oha. Ich hatte das nämlich vorher in einer normalen Funktion. Da stand der eventlistener auch davor und es klappte. Da hab ich dann nicht mehr drauf geachtet.

        Funktionen in JavaScript können innerhalb ihres Scopes voraus-referenziert werden.

        Martin

        1. Funktionen in JavaScript können innerhalb ihres Scopes voraus-referenziert werden.

          Variablen (alle) werden voraus-definiert - er hat die Variable meinObjekt in einer vorher deklarierten Funktion verwendet.

          1. Hi,

            Funktionen in JavaScript können innerhalb ihres Scopes voraus-referenziert werden.
            Variablen (alle) werden voraus-definiert - er hat die Variable meinObjekt in einer vorher deklarierten Funktion verwendet.

            möglicherweise verstehe ich dich falsch, aber Variablen kann ich erst ab dem Zeitpunkt ihrer Deklaration benutzen.

            Martin

            1. Hi,

              Funktionen in JavaScript können innerhalb ihres Scopes voraus-referenziert werden.
              Variablen (alle) werden voraus-definiert - er hat die Variable meinObjekt in einer vorher deklarierten Funktion verwendet.

              möglicherweise verstehe ich dich falsch, aber Variablen kann ich erst ab dem Zeitpunkt ihrer Deklaration benutzen.

              Keine Ahnung, ich meine "Hoisting". Hab oben allerdings auch einen Denkfehler gehabt(Er hat die Funktion nach der Zuweisung als Eventhandler deklariert, damit ist die Funktion die Variable die voraus-definiert wurde. Die Variable meinObjekt hat mit der ganzen sache überhaupt nichts zu tun).
              Es werden aber alle Variablen im Voraus definiert. Das ist aber nur für Funktionsdeklarationen von Bedeutung, da eine Funktionsdeklaration EIN Statement ist. Also im Gegensatz zu normalen Variablen ist eine Funktionsdeklaration beides in einem Statement, Variablendeklaration UND Zuweisung.
              Damit ergibt sich der Unterschied zw. einer Functiondeclaration und einer Functionexpression

                
              decl();  
              function decl()  
              {  
                alert("ok");  
              }  
              
              

              und

                
              expr();  
              var expr = function()  
              {  
                alert("nok");  
              }  
              
              

              Durch "Hoisting" wird das 1. zu

                
              function decl()  
              {  
                alert("ok");  
              }  
              decl();  
              
              

              und das 2. zu

                
              var expr = undefined;  
              expr();  
              expr = function()  
              {  
                alert("nok");  
              }  
              
              
    2. Wenn es _davor_ steht, existiert »meinObjekt« natürlich zu dem Zeitpunkt noch nicht. Rufe addEventListener erst _nach_ der Deklaration des Objektes auf.

      Oder (falls zu dem Zeitpunkt, an dem du den Event-Handler registriert, die Methode noch nicht bekannt sein kann) pack den Listener in einen Closure.

        
      window.addEventListener('load', function(){ obj.init(); }, false);  
      
      

      Im Übrigen löst du damit gleich ein weiteres Problem:

      Beim Ausführen des Event-Handlers referenziert this das window-Objekt und nicht deine Objektinstanz, wie du es vermutlich gerne hättest.

      1. Oder (falls zu dem Zeitpunkt, an dem du den Event-Handler registriert, die Methode noch nicht bekannt sein kann) pack den Listener in einen Closure.

        Closure ist hier die falsche Bezeichnung. Wrap dat Ding in einen einen Funktions-Ausdruck.