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?
Ankündigung
Einklappen
Keine Ankündigung bisher.
__autoload() für JavaScript
Einklappen
Neue Werbung 2019
Einklappen
X
-
__autoload() für JavaScript
Stichworte: -
-
Zitat von madhatter Beitrag anzeigeneben in den meisten programmiersprachen nicht.
-
Zitat von ChrisB Beitrag anzeigenMethoden sind „Eigenschaften“ eines Objektes.
window.alert() === window["alert"]()
in javascript geht es nur wegen dem datentyp function.
Einen Kommentar schreiben:
-
Zitat von madhatter Beitrag anzeigenverstehe 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.
window.alert() === window["alert"]()
Einen Kommentar schreiben:
-
Vor allem gibts keine Objekte so wie in PHP
Zum Thema: Was spricht denn gegen einen Loader á la
Code:import('namespace.package.class');
Btw: Nach dem ersten Laden liegen die JS-Dateien im Cache, d. h. sie werden mitnichten jedesmal vom Server geladen.
Einen Kommentar schreiben:
-
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:
-
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:
-
Ein Gast antworteteMir würde da nur ausprobieren einfallen
Mit FireBug sollte das ja kein Problem sein
Einen Kommentar schreiben:
-
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:
-
Zitat von madhatter Beitrag anzeigenProblem 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?
Einen Kommentar schreiben:
-
@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:
-
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:
-
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:
-
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:
-
Scripte lassen sich in JS auch nicht so bequem nachladen wie in PHP.
Einen Kommentar schreiben:
Einen Kommentar schreiben: