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

  • madhatter
    hat ein Thema erstellt __autoload() für JavaScript.

    __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?

  • ChrisB
    antwortet
    Zitat von madhatter Beitrag anzeigen
    eben in den meisten programmiersprachen nicht.
    Wir reden hier aber über JavaScript - also welche Relevanz soll dieser „Einwand“ bitte haben?

    Einen Kommentar schreiben:


  • madhatter
    antwortet
    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.

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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"]()

    Einen Kommentar schreiben:


  • xm22
    antwortet
    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.

    Einen Kommentar schreiben:


  • rudygotya
    antwortet
    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.

    Einen Kommentar schreiben:


  • madhatter
    antwortet
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Mir würde da nur ausprobieren einfallen

    Mit FireBug sollte das ja kein Problem sein

    Einen Kommentar schreiben:


  • madhatter
    antwortet
    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.

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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"]

    Einen Kommentar schreiben:


  • madhatter
    antwortet
    @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.

    Einen Kommentar schreiben:


  • rudygotya
    antwortet
    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

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:


  • madhatter
    antwortet
    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.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Scripte lassen sich in JS auch nicht so bequem nachladen wie in PHP.

    Einen Kommentar schreiben:

Lädt...
X