this und OOP

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

  • this und OOP

    Ich stehe gerade vor einem großen Verständnisproblem. Dazu folgender Code:
    PHP-Code:
    function bla () 
    {
      
    this.publ "öffentlich";
      
    this.publicMethod = function () 
      {
        
    privateMethode();
      }
      function 
    privateMethode () 
      {
        
    alert(this.publ);
      }
    }
    var 
    obj = new bla();
    obj.publicMethod(); 
    Der alert gibt hier ein undefined aus. Das liegt daran, dass this in diesem Fall auf window verweist. Könnt ihr ganz einfach mit
    PHP-Code:
    alert(this); 
    sehen. Aber warum? Was ist der Sinn dahinter? In einer "öffentlichen" Methode kann ich auf die "öffentliche" Eigenschaft publ zugreifen:
    PHP-Code:
    this.publicMethod = function () 
      {
        
    alert(this.publ);
      } 
    Waum ist das bei "privaten" Methoden nicht möglich. Statt dessen hänge ich auf einmal im window-Objekt herum.

    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

  • #2
    Hallo Peter,

    in JS gibt es kein öffentlich und privat wie z. B. in PHP. Deine „private“ Methode ist einfach eine Closure und ihr this bezieht sich auf ihren eigenen Scope. Den kannst du jedoch auch gezielt übertragen, wenn du publicMethod umschreibst:

    Code:
      this.publicMethod = function () 
      {
        privateMethode.call(this);
      }
    Dann wird privateMethode im Scope deines Objekts aufgerufen und ihr this ist dann dasselbe.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Ach, ich werde diese Sprache nie ganz begreifen . An den Closures sitze ich gerade dran. Bin also jetzt schon ein Stück weiter.

      Danke Schatzi
      Peter
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Weiß nicht, ob du die SELFHTML Aktuell Artikel kennst, aber für ein etwas tieferes Verständnis von solchen JavaScript-Spezifika sind folgende sehr aufschlußreich:

        Organisation von JavaScripten
        Objekt-Handling in JavaScript
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Ich bin mittlerweile auch schon sehr viel weiter. Vielleicht werde ich diese Sprache ja doch noch begreifen. Man darf beim Lernen nur nie an PHP und OOP denken.

          Peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            Ist das hier alltagstauglich oder eher zu vermeiden?

            Code:
            function myClass {
                var that = this;
            
                var foo = function() {
                    that.bar();
                };
            
                this.bar = function() {
                    alert('foobar!');
                };
            }
            Zuletzt geändert von h3ll; 26.08.2010, 23:23.

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Ist das hier alltagstauglich
              Ja, besonders in solchen Fällen wie dem gezeigten, der sich mit Closures nur umständlich und schwer lesbar realisieren lassen würde.[/CODE]
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar

              Lädt...
              X