Heim >Web-Frontend >js-Tutorial >Wie erstelle ich eine Funktion aus einer Zeichenfolge in JavaScript?

Wie erstelle ich eine Funktion aus einer Zeichenfolge in JavaScript?

王林
王林nach vorne
2023-08-28 12:49:101390Durchsuche

如何在 JavaScript 中从字符串创建函数?

Das Erstellen einer Funktion aus einer Zeichenfolge in JavaScript kann hilfreich sein, wenn Sie eine Funktion zur Laufzeit dynamisch generieren müssen oder eine Zeichenfolge mit Code für eine Funktion haben, die Sie ausführen möchten.

Die Möglichkeit, Funktionen aus Strings zu konstruieren, ist eine nützliche Funktion von JavaScript, die es ermöglicht, Funktionen dynamisch zur Laufzeit zu erstellen. Die eval()-Funktion und die neue Function()-Funktion Object() [nativer Code] sind die beiden beliebtesten Methoden hierfür, obwohl beide erhebliche Sicherheitslücken aufweisen.

Function.prototype.constructor ist eine sicherere Option, obwohl sie weniger bekannt ist. Bevor Sie sich für einen JavaScript-Ansatz zum Erstellen von Funktionen aus Zeichenfolgen entscheiden, ist es wichtig, die Risiken und Anwendungsfälle zu berücksichtigen.

Methode 1: Verwenden Sie die Funktion eval()

Die JavaScript-Methode eval() ist eine der einfachsten Möglichkeiten, eine Funktion aus einem String zu erstellen. Diese leistungsstarke Funktion eval() kann jeden ihr bereitgestellten JavaScript-Code als String ausführen.

Beispiel

<html>
<body>
   <p id="result"></p>
   <script>
      let functionString = "function add(a, b) { return a + b; }";
      let add = eval("(" + functionString + ")");
      document.getElementById("result").innerHTML = "Sum of 1 and 2: " + add(1, 2);
   </script>
</body>
</html>

Hier können wir sehen, dass wir eine Funktion haben, die zwei Parameter akzeptiert und deren Summe zurückgibt. Diese Funktion ist nun in einem String enthalten. Die Funktion eval() empfängt diesen String als Parameter und wertet ihn aus, bevor sie die Funktion zurückgibt. Die zurückgegebene Funktion wird dann einer Variablen namens add zugewiesen, die wie jede andere Funktion verwendet werden kann.

Allerdings führt es jeden ihm zugeführten JavaScript-Code aus, daher kann die Verwendung im Produktionscode riskant sein, da es zu Sicherheitslücken führen kann.

Methode 2: Verwenden Sie den neuen Function()-Konstruktor

Eine andere Möglichkeit, eine Funktion aus einem String in JavaScript zu erstellen, ist die Verwendung des Function()-Konstruktors. Der Function()-Konstruktor erstellt ein neues Funktionsobjekt aus einer Zeichenfolge, die den Funktionscode enthält. Hier ist ein Beispiel dafür, wie man mit dem Function()-Konstruktor eine Funktion aus einer Zeichenfolge erstellt –

Beispiel

<html>
<body>
   <p id="print"></p>
   <script>
      let functionString = "function add(a, b) { return a + b; }";
      let functionBody = functionString.substring(
         functionString.indexOf("{") + 1,
         functionString.lastIndexOf("}")
      );
      let add = new Function("a", "b", functionBody);
      document.getElementById("print").innerHTML = "Sum of 1 and 2: " + add(1, 2);
   </script>
</body>
</html>

In diesem Beispiel übergeben wir eine Zeichenfolge, die den Funktionscode enthält, an den Function()-Konstruktor, der aus der Zeichenfolge ein neues Funktionsobjekt erstellt. Anschließend weisen wir die zurückgegebene Funktion der Variablen add zu, die wie jede andere Funktion verwendet werden kann.

Da es nur Funktionen erstellen kann, ist es weniger riskant als eval(), birgt aber dennoch ähnliche Risiken

Methode 3: Verwenden Sie Function.prototype.constructor

Dadurch wird eine Funktion generiert und es kann kein anderer Code außer dem als String übergebenen Funktionskörper ausgeführt werden. Allerdings ist sie weniger verbreitet und wird von älteren Browsern nicht so gut unterstützt wie die beiden anderen Methoden.

Beispiel

<html>
<body>
   <p id="result"></p>
   <script>
      let add = Function.prototype.constructor('a', 'b', 'return a+b')(1, 2);
      document.getElementById("result").innerHTML = "Sum: " + add;
   </script>
</body>
</html>

In diesem Beispiel werden dem Konstruktor Funktionsparameter und Funktionskörper bereitgestellt. Wir verwenden Function.prototype.constructor, um eine neue Funktion mit den angegebenen Parametern und dem angegebenen Funktionskörper zu erstellen, und rufen die Funktion dann sofort auf, indem wir die Funktion mit den angegebenen Parametern aufrufen

Denken Sie daran, dass die Funktion, die Sie aus einer Zeichenfolge erstellen, Zugriff auf den globalen Gültigkeitsbereich hat und nicht in den Gültigkeitsbereich des Codes einbezogen wird, aus dem Sie sie erstellen.

Eine weitere wichtige Sache, die Sie beachten sollten, ist, dass das Erstellen von Funktionen aus Strings Ihre Anwendung verlangsamen kann, insbesondere wenn der Funktionskörper lang ist.

Wenn die Funktion komplex ist, wird es außerdem schwieriger, den Code zu verstehen und zu debuggen, wenn die Funktion aus einer Zeichenfolge erstellt wird.

Aus Sicherheitsgründen wird im Allgemeinen nicht empfohlen, die Methoden eval() und new Function() im Produktionscode zu verwenden. Stattdessen sollten Sie andere Optionen in Betracht ziehen, z. B. die Vorkompilierung von Funktionen oder die Verwendung eines JavaScript-Präprozessors wie Babel, um Ihren Code in eine äquivalente, sicherere Version umzuwandeln.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine Funktion aus einer Zeichenfolge in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen