private Methoden in Literal-Objekten

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

  • private Methoden in Literal-Objekten

    ein Literal sieht ja einfach gesagt so aus:
    PHP-Code:
    var bla 
    {
      
    blubb 'blubber',
      
    laber: function()
      {
        
    alert (this.blubb);
      }
    }
    bla.laber(); 
    nun ist die methode laber öffentlich zugänglich. wie sähe sie aus, damit man nur innerhalb des literals darauf zugreifen kann. hatte was mit this.laber = function im kopf, aber das war es nicht. geht das überhaupt?

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

  • #2
    Mit this.irgendwas erstellst du öffentliche Methoden. Die Wikipedia hat ein gutes Beispiel, wie du private Methoden erstellen kannst.

    Kommentar


    • #3
      Zitat von PHP-Desaster Beitrag anzeigen
      Mit this.irgendwas erstellst du öffentliche Methoden. Die Wikipedia hat ein gutes Beispiel, wie du private Methoden erstellen kannst.
      das weiß ich alles schon, aber hier geht es um literal-objekte, und da sieht die sache ein wenig anders aus ;-)

      peter

      OT: hier sind schon wieder ein paar smiles hops gegangen
      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
      Meine Seite

      Kommentar


      • #4
        Ah, dann meinst du mit Literal-Objekten solch eine JSONotation. Da gibt es afaik keine Möglichkeit, sowas wie private Methoden zu erstellen.

        Kommentar


        • #5
          Zitat von PHP-Desaster Beitrag anzeigen
          Ah, dann meinst du mit Literal-Objekten solch eine JSONotation. Da gibt es afaik keine Möglichkeit, sowas wie private Methoden zu erstellen.
          ich glaube, da gab es eine etwas krude möglichkeit. bin mir aber nicht mehr sicher.

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

          Kommentar


          • #6
            Das macht ehrlich gesagt keinen Sinn. Du brauchst einen Konsruktor mit Prototyp um eine private funktion zu erstellen. Das heisst du musst entweder eine Funktion benutzen oder ein, wie du es nennst, literales Objekt erstellen und im Nachhinein einen Konstruktor und einen Prototyp anfügen.

            Kommentar


            • #7
              das geht auch so:
              Code:
              function obj(){
                  var private_var = 42;
                  function private(){return private_var;}
                  function protected(){return private();}
                  return {protected:protected};
              }
              
              var o = obj();
              o.protected(); // 42
              o.private(); // TypeError
              o.private_var; // undefined
              edit: um das alles mehr 'literal' zu machen:
              Code:
              var o = (function (another_private){
                  var private_var = 42;
                  function private(){return private_var;}
                  function protected(){return private();}
                  return {protected:protected};
              })("parameter");
              Zuletzt geändert von frodenius; 15.05.2009, 11:49.
              blllubb

              Kommentar


              • #8
                Zitat von frodenius Beitrag anzeigen
                das geht auch so:
                Code:
                function obj(){
                    var private_var = 42;
                    function private(){return private_var;}
                    function protected(){return private();}
                    return {protected:protected};
                }
                
                var o = obj();
                o.protected(); // 42
                o.private(); // TypeError
                o.private_var; // undefined
                das weiß ich doch. hier geht es speziell um literal-objekte

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

                Kommentar


                • #9
                  Hi,

                  mit einem reinen Objektliteral ist das afaik nicht möglich. Mir fällt da nur die Lösung über einen Container ein.

                  LG

                  Kommentar


                  • #10
                    Zitat von kuddeldaddeldu Beitrag anzeigen
                    mit einem reinen Objektliteral ist das afaik nicht möglich. Mir fällt da nur die Lösung über einen Container ein.LG
                    Und ausgerechnet in dem Artikel verlinken sie auf mich . Aber das ist ja wirklich krank. Ein Literal innerhalb eines "Klassen"-Objektes. Trotzdem genau das, was ich gesucht habe. Danke! Und jetzt kann ich wieder alles umprogrammieren. Danke!

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

                    Kommentar


                    • #11
                      Zitat von Kropff Beitrag anzeigen
                      das weiß ich doch. hier geht es speziell um literal-objekte

                      peter
                      ??
                      wie ist der selfhtml-kram anders als das was ich gepostet habe?
                      blllubb

                      Kommentar


                      • #12
                        Zitat von frodenius Beitrag anzeigen
                        ??
                        wie ist der selfhtml-kram anders als das was ich gepostet habe?
                        als literal sähe das in etwa so aus:
                        PHP-Code:
                        var obj
                        {
                          
                        public_var 42,
                          
                        publicFunc : function ()
                          {
                            return 
                        this.public_var;
                          }
                        }
                        bla obj.publicFunc(); 
                        nur dass es in dem fall keine "privaten" methoden und eigenschaften gibt.

                        peter
                        Zuletzt geändert von Kropff; 16.05.2009, 15:07.
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          ... deswegen kommt ja das (function(){return ;})() drum herum.
                          blllubb

                          Kommentar


                          • #14
                            Zitat von frodenius Beitrag anzeigen
                            ... deswegen kommt ja das (function(){return ;})() drum herum.
                            ist imho aber kein literal.

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

                            Kommentar

                            Lädt...
                            X