Funktiont ändern, _nicht_ ersetzen
David
- javascript
Hallo Javascript-Profis,
ich schreibe gerade ein Plugin für ein Javascript-Programm (WYSIWYG-Editor) und müsste Zeilen in einer bereits definierten Funktion ändern/löschen.
Gibt es da irgendeine Möglichkeit?
an den Funktionstext komme ich natürlich leicht:
func = funktion.toString()
und könnte dann in dem String natürlich auch mit der replace()
-Methode einfach Text ersetzen, nur habe ich dann ja leider einen String... gibt es soetwas wie .toFunction()
? Oder etwas wie eval()
bei PHP? Wahrscheinlich wohl nicht...?!
Als Alternative bleibt natürlich, die Funktion neu zu definieren, allerdings möchte ich ja gerade das vermeiden, um bei Versionswechseln nicht u.U. das Plugin jedesmal anpassen zu müssen.
Vielen Dank, David
Tag David.
ich schreibe gerade ein Plugin für ein Javascript-Programm (WYSIWYG-Editor) und müsste Zeilen in einer bereits definierten Funktion ändern/löschen.
Ist das Ganze objektorientiert? Dann könntest du ein eigenes Objekt erstellen und die unerwünschte Funktion "überschreiben". Ansonsten könntest du im Kopf der HTML-Datei _nach_ dem Einbinden der Funktionsbibliothek einen eigenen Scriptbereich notieren, in den du die angepasste Funktion packst. Damit würde die eingebundene Funktion überschrieben. Alternativ bindest du halt eine zweite js-Datei mit der von dir geänderten Funktion ein.
Sollte ich dich komplett missverstanden haben, wäre ein Beispiellink nicht verkehrt.
Siechfred
Hallo Siechfred,
das Überschreiben der Funktion an sich ist nicht das Problem.
Ich möchte halt nicht den gesamten Funktionstext, gekürzt um die entsprechenden Stellen, in mein Skript kopieren, da ich das ja dann nach jedem Release des Editors auf Änderungen in der Funktion überprüfen müsste.
Ich möchte also nur bestimmte Zeilen durch einen leeren String ersetzen - so wie das bei Strings mit replace() geht - als wäre der Funktionstext grundsätzlich unbekannt.
David
Tag David.
Ich möchte halt nicht den gesamten Funktionstext, gekürzt um die entsprechenden Stellen, in mein Skript kopieren, da ich das ja dann nach jedem Release des Editors auf Änderungen in der Funktion überprüfen müsste.
Das wäre m.E. aber der vernünftigere Weg, als die unerwünschten Zeilen rauszulöschen und den Reststring mit eval() zu verarbeiten.
Ich möchte also nur bestimmte Zeilen durch einen leeren String ersetzen - so wie das bei Strings mit replace() geht - als wäre der Funktionstext grundsätzlich unbekannt.
Warum schreibst du dir nicht einfach eine Funktion, die die unerwünschte Funktion aufruft und das Ergebnis nach deinen Wünschen nachbehandelt?
Siechfred
Das wäre m.E. aber der vernünftigere Weg, als die unerwünschten Zeilen rauszulöschen und den Reststring mit eval() zu verarbeiten.
Möglicherweise. Allerdings muss ich entgegenhalten: Es handelt sich, wie gesagt, um einen Javascript-Browser-wysiwyg-Editor (tinymce) - theoretisch könnte es ja sein, dass auch andere Plugins diese Funktion verändern. Das würde ich ja 'rückgängig machen', wenn ich die Funktion im Nachhinein überschreibe.
Warum schreibst du dir nicht einfach eine Funktion, die die unerwünschte Funktion aufruft und das Ergebnis nach deinen Wünschen nachbehandelt?
Die Funktion gibt keinen Rückgabewert - sie wird bei Veränderungen des Editorinhalts aufgerufen und kontrolliert u.A., ob Buttons (für Schrift- und Absatzformatierung) aktiviert oder deaktiviert dargestellt werden.
Da mein Plugin die Funktion der Ein- und Ausrück-Buttons verändert (bisher per <blockquote>, mit Plugin über margin-left), ändern sich auch die Kriterien dafür, ob sie an- oder ausgeschaltet sind. Daher muss ich die Funktion ändern.
Der eval()-Befehl war genau was ich suchte. Vielen Dank!
Ich gehe jetzt so vor:
func = funktionsname;
func = func.replace (/regEx/, '');
eval (func);
Das klappt wunderbar.
Besten Dank + Gruß,
David
Es muss natürlich heißen:
func = funktionsname.toString ();
func = func.replace (/regEx/, '');
eval (func);