Beispielsweise;
var s = "function test(){
alert(1);
}";
var fnc = aMethod(s);
Wenn dies die Zeichenfolge ist, möchte ich eine Funktion namens fnc. Und fnc();
öffnet den Alarmbildschirm.
eval("alert(1);")
löst mein Problem nicht.
javascript
string
function
ymutlu
quelle
quelle
Eine bessere Möglichkeit, eine Funktion aus einer Zeichenfolge zu erstellen, ist die Verwendung von
Function
:Dies hat den Vorteil / Nachteil, dass Variablen im aktuellen Bereich (wenn nicht global) nicht für die neu erstellte Funktion gelten.
Das Übergeben von Argumenten ist ebenfalls möglich:
quelle
Function
Sie den lokalen Bereich nicht verschmutzen, und dieseval
macht die Optimierung für Motoren so schwierig ... Mit dem OP-Beispiel würde ich:var fnc = Function('return '+s)();
element.onclick = function() { alert("test"); }
.Du bist ziemlich nah dran.
Hier ist eine funktionierende Geige .
quelle
eval
Warnung für zukünftige Suchende:eval
Kann Lücken für Hacker öffnen: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…. Wenn Sie jedoch die Gefahren kennen und diese vermeiden können, ist dies ein guter einfacher Weg Erstellen Sie eine Funktion aus einem StringJa, die Verwendung
Function
ist eine großartige Lösung, aber wir können noch einen Schritt weiter gehen und einen universellen Parser vorbereiten, der die Zeichenfolge analysiert und in eine echte JavaScript-Funktion konvertiert ...Anwendungsbeispiele:
hier ist jsfiddle
quelle
Dynamische Funktionsnamen in
JavaScript
Verwenden von
Function
Quelle: http://marcosc.com/2012/03/dynamic-function-names-in-javascript/
Verwenden von
eval
Verwenden von
sjsClass
https://github.com/reduardo7/sjsClass
Beispiel
quelle
Diese Technik mag letztendlich der Eval-Methode entsprechen, aber ich wollte sie hinzufügen, da sie für einige nützlich sein könnte.
Dies entspricht dem Hinzufügen dieses <script> -Elements am Ende Ihres Dokuments, z. B.:
quelle
Verwenden Sie das
new Function()
mit einem Return im Inneren und führen Sie es sofort aus.quelle
Ein Beispiel mit dynamischen Argumenten:
quelle