Ankündigung

Einklappen
Keine Ankündigung bisher.

__autoload() für JavaScript

Einklappen

Neue Werbung 2019

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

  • __autoload() für JavaScript

    weiß jemand, ob es für die __autoload() Funktion in PHP auch eine Entsprechung bei JavaScript gibt?
    Ich würde gerne Klassen in einzelne JS-Files auslagern und nur bei Bedarf laden.

    Haber mir ein Page-Klasse gebaut, die über ein Loader-Objekt verfügt die Klassen-Files nachladen kann. Leider stoße ich da auf ein Problem. Um die Datei nachzuladen muss ich den Namen der Klasse (der dem Dateinamen gleicht) als String übergeben. Nachladen läuft Prima. Problem bekomme ich nur, wenn ich den String zum Aufruf des Konstruktors verwenden möchte. Das kriege ich nicht hin. Gibt es in JS auch variable Variablen oder eine andere möglichkeit eine Funktion über einen dynamischen Namen aufzurufen?

    Habe mich da irgendwie festgefahren. Hat jemand eine Idee?

  • #2
    Ich weiß es nicht definitiv. Aber ich hab davon noch nie was gehört oder gesehen. Vor allem gibts keine Objekte so wie in PHP sondern alles wird ja über Prototypen abgehandelt. Ob es dabei dann autoloading gibt, ich bezweifle es!

    Kommentar


    • #3
      Scripte lassen sich in JS auch nicht so bequem nachladen wie in PHP.
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        na ja... das geht schon. man erzeugt dynamisch neue script-tags. nach dem nachladen stehen die klassen oder eizelne funktionen und variablen wie bei einem php-include zur verfügung. das ist ja letzendlich auch der sinn der sache, dass dynamisch nur die benötigten files nachgeladen werden und die scripttags nicht gleich in quellencode stehen, so dss sie auch der dümmste webdesigner klauen kann

        das problem, was ich habe ist, dass ich das über zwei anweisungen machen muss. eine anweisung zum nachladen der datei und eine um das passende objekt zu erzeugen. ich würde das gerne ereinen.

        Kommentar


        • #5
          Ich weiß, das das „schon geht“. Die dynamischen Script-Tags erzeugen ab je einen eigenen Request (und viell. sogar einen Neuaufbau der grafischen Ausgabe im Browser), was sicher nicht mehr sehr Performance-versprechend ist.
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Z.b. script.aculo.us oder auch jquery getScript lösen das Nachladen sehr elegant. Zur eigentlichen Fragestellung würde mir jetzt nur eval einfallen
            I like cooking my family and my pets.
            Use commas. Don't be a psycho.
            [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

            Kommentar


            • #7
              @rudygotya
              getScript ist ein super tipp. hatte ich garnicht auf der pfanne gehabt.
              vielen dank. jetzt muss ich nur noch was finden, mit dem ich aus einem namen (string) einen konstruktoraufruf generieren kann.

              Kommentar


              • #8
                Zitat von madhatter Beitrag anzeigen
                Problem bekomme ich nur, wenn ich den String zum Aufruf des Konstruktors verwenden möchte. Das kriege ich nicht hin. Gibt es in JS auch variable Variablen oder eine andere möglichkeit eine Funktion über einen dynamischen Namen aufzurufen?
                object.property === object["property"]
                [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                Kommentar


                • #9
                  ok, danke.
                  verstehe ich aber trotzdem noch nicht ganz. so kann ich doch nur auf die eigenschaften des objektes zugreifen. wie soll das denn aussehen, wenn ich auf die methoden zugreifen will, oder gar den konstruktor selbst aufrufen will.

                  habe das jetzt über eval hingekriegt. allerdings ist $.getScript() nicht ganz so wie ich das brauche. ich will benötigte scripte einmalig einbinden, so dass ich beliebig viele objekte aus der eingebundenen klasse erzeugen kann und vorallem auch zum späteren zeitpunkt, ohne neu nachladen zu müssen. getScript holt ein script und führt es gleich aus. ich kann also das script holen und sofort in der callback funktion das objekt erzeugen. will ich später aus der klassen ein objekt bauen, muss ich es neu mit getScript holen.

                  die einzige frage wäre, ob es dann tatsächlich ein neuer request ist, oder ob es dann aus dem browsercashe geladen wird.

                  Kommentar


                  • #10
                    Mir würde da nur ausprobieren einfallen

                    Mit FireBug sollte das ja kein Problem sein

                    Kommentar


                    • #11
                      das mit dem getScript war doch keine gute lösung.
                      habe jetzt ein scripttag erzeugt und diesen per $('head').append(...) eingefügt und eine liste der geladen scripte eingetragen, damit ich ich das script nicht mehrmals lade. läuft perfekt. danke für die tipps. das eval war hier entscheidend.

                      Kommentar


                      • #12
                        Du musst nur z.b. in einem array festhalten, was schon geladen wurde. Wenn nicht, nachladen. Ansonsten cached getScript by default. Trotzdem überschreibst du damit evtl vorhandene objekte.
                        I like cooking my family and my pets.
                        Use commas. Don't be a psycho.
                        [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                        Kommentar


                        • #13
                          Vor allem gibts keine Objekte so wie in PHP
                          Man hat auch in Javascript ganz normale Objekte..

                          Zum Thema: Was spricht denn gegen einen Loader á la
                          Code:
                          import('namespace.package.class');
                          , welcher dann im Hintergrund die passende Datei einbindet? So ähnlich läuft es doch in den meisten Programmiersprachen.

                          Btw: Nach dem ersten Laden liegen die JS-Dateien im Cache, d. h. sie werden mitnichten jedesmal vom Server geladen.

                          Kommentar


                          • #14
                            Zitat von madhatter Beitrag anzeigen
                            verstehe ich aber trotzdem noch nicht ganz. so kann ich doch nur auf die eigenschaften des objektes zugreifen. wie soll das denn aussehen, wenn ich auf die methoden zugreifen will, oder gar den konstruktor selbst aufrufen will.
                            Methoden sind „Eigenschaften“ eines Objektes.

                            window.alert() === window["alert"]()
                            [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                            Kommentar


                            • #15
                              Zitat von ChrisB Beitrag anzeigen
                              Methoden sind „Eigenschaften“ eines Objektes.

                              window.alert() === window["alert"]()
                              eben in den meisten programmiersprachen nicht.
                              in javascript geht es nur wegen dem datentyp function.

                              Kommentar

                              Lädt...
                              X