[JavaScript] Methoden Dynamisch aufrufen

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

  • [JavaScript] Methoden Dynamisch aufrufen

    Folgendes Problem: ich versuche mich momentan daran, eine Klasse in JavaScript zu erstellen, die eine private Methode der Klasse über eine öffentliche Methode selbiger aufruft. Da das ganze relativ unverständlich klingt, hier die Umsetzung in PHP.

    PHP-Code:
    <?php
    class Foo
    {
        public function 
    callMethod($method) {
            
    $this->$method();
        }

        private function 
    bar() {
            echo 
    'Methode bar wurde aufgerufen!';
        }
    }

    $instance = new Foo;
    $instance->callMethod('bar');

    //output: Methode bar wurde aufgerufen!
    ?>
    Ist so etwas mit JavaScript überhaupt möglich? Wenn ja, wie rufe ich die entsprechende Methode auf? Ich hoffe, dass ich nicht ein entsprechendes Thema übersehen habe, Google wurde ebenfalls bemüht, ohne Ergebnis. Über hilfreiche Antworten würde ich mich freuen.

  • #2
    Ich steh gerade auch vor dem Problem, habe das folgendermaßen realisiert:
    Code:
    function __func() {
    	this.func = new Object(); 
    }
    var f = new __func();
    
        // Funktion
    f.func['foo'] = function(text) {
       alert(text);
    }
    
        // Aufruf
    f.func['foo']("bar");
    Funzt ganz gut. Evtl. kennt ja jemand was besseres...

    Kommentar


    • #3
      ich traue mich kaum, zu antworten. aber das einzige, was mir auf die schnelle eingefallen ist, sieht leider so aus:
      PHP-Code:
      function Bla ()
      {
        
      this.callMethod = function (method)
        {
          eval (
      method '()');
        }
        function 
      blubb ()
        {
          
      alert ('jodelblah');
        }
      }

      laber = new Bla ();
      laber.callMethod('blubb'); 
      also bitte schnell wieder vergessen. wahrscheinlich gibt es da in javascript wieder mal eine extrem krude methode, die keiner kennt.
      @PHPler
      was du machst, nennt sich prototyping und ist mit php so nicht vergleichbar. außerdem hast du nur eine methode, nicht zwei.

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

      Kommentar


      • #4
        Wusste gar nicht, dass es das evil eval auch in JavaScript gibt :P Aber danke für die beiden Lösungsansätze. Da ich mich leider selbst mit JavaScript nicht besonderst gut auskenne, habe ich keine Ahnung ob die beiden Beispiele so sinnvoll zu verwenden sind. Vielleicht kann sich ja noch einer der JS-Profis kurz äußern? Aber wie gesagt, vielen Dank schon einmal.

        Kommentar


        • #5
          Bin zwar bei weitem kein Profi, aber ansich, so wie du es machen möchtest, gibt es nur eval als Möglichkeit.

          Allerdings könntest du einen Umweg abuen:

          PHP-Code:
          switch(methodName){
            case 
          'blubb'blubb(); break;

          Im Zusammenhang zu Kropffs Script, aber als Ersatz für das eval().

          Eine andere Möglichkeit fällt auch mir nicht ein.

          mfg

          Kommentar


          • #6
            Original geschrieben von Blackgreetz
            Bin zwar bei weitem kein Profi, ...
            OffTopic:
            davon gibt es bei dieser sprache imho eh nur ganz wenige

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

            Kommentar


            • #7
              Gut, dann werde ich's erstmal mit eval realisieren, das scheint mir die beste Möglichkeit zu sein.

              Kommentar


              • #8
                Original geschrieben von Kropff
                OffTopic:
                davon gibt es bei dieser sprache imho eh nur ganz wenige
                OffTopic:
                Jup, ich weiß. Zumal das Thema des Forums ansich ja php ist

                Kommentar


                • #9
                  Original geschrieben von matzeee
                  Gut, dann werde ich's erstmal mit eval realisieren, das scheint mir die beste Möglichkeit zu sein.
                  halte ich persönlich für keine gute wahl. da ist die variante von blackgreetz schon deutlich sauberer. und warum legst du die entsprechenden zusätzlichen methoden nicht als public fest. wenn man sie eh von aussen ansteuern können soll? sieht mir nach einem kleinen designfehler aus. sag doch mal, was genau du vorhast.

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

                  Kommentar


                  • #10
                    Genau, würde ich auch so machen, wir Kropff schon vorschlägt. Dann wird das ein einfaches
                    PHP-Code:
                    this[method](); 
                    .

                    Kommentar


                    • #11
                      Dieser Aufbau erscheint vollkommen unsinnig.
                      Warum erstellst du eine Private methode um sie dann über eine öffentliche aufzurufen? Warum machst du nicht gleich eine öffentliche Methode daraus?

                      Kommentar

                      Lädt...
                      X