We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Der Function Konstruktor erstellt ein neues Funktion Objekt. Das direkte Aufrufen kann Funktionen dynamisch erstellen, hat aber Sicherheits- und Performanceprobleme genau wie der Einsatz von eval.

Jede JavaScript Funktion ist aktuell ein Function Objekt.

Syntax

new Function ([arg1[, arg2[, ...argN]],] functionBody)

Parameter

arg1, arg2, ... argN
Namen die von der Funktion als formelle Argument-Name genutzt werden. Jeder davon muss ein String sein, welcher mit einem gültigen JavaScript identifier (Variablennamen) oder einer Liste von solchen Strings, getrennt mit einem Komma; zum Beispiel: "x", "derWert", oder "a,b", übereinstimmen.
functionBody
Ein String, welcher den JavaScript Ausdruck als Funktions-Definition beinhaltet.

Beschreibung

Mit dem Function Constructor erstellte Funktions-Objekte werden ausgewertet, sobald die Funktion erstellt wurde. Dies ist weniger effizient, als wenn man eine Funktion deklariert und diese innerhalb des Codes abruft, weil mit einem Funktions-Ausdruck deklarierte Funktionen mit dem Rest des Codes aufgerufen werden.

Alle der Funktion übergegebenen Argumente werden als Namen von Identifizierer (z.B. Variablennamen) als Parameter in der zu erstellenden Funktion behandelt - in der Reihenfolge, in welcher sie übergeben werden.

Das Aufrufen des Function Konstruktors als Funktion (ohne den "new" Operator) hat dieselbe Wirkung, wie es als Konstrukteur aufruft.

Eigenschaften und Methoden von Function

Das globale Function Objekt hat eigene Methoden und Eigenschaften, doch, da es eine Funktion selbst ist, erbt es einige Methoden und Eigenschaften durch die Prototypkette aus Function.prototype.

Function Prototyp Objekt

Eigenschaften

Methoden

Function Instanzen

Funktions-Instanzen erben Methoden und Eigenschaften vom Function.prototype. Wie bei allen Konstruktoren kann das Prototypen Objekt verändern werden, um Änderungen an allen Funktions-Instanzen durchzuführen.

Beispiele

Spezifizieren von Argumente mit dem Function Konstruktor

Der folgende Code erstellt ein Funktions-Objekt, welches zwei Argumente entgegennimmt.

// Das Beispiel kannst du direkt in der JavaScript console laufen lassen.

// Erstellt eine Funktion, die zwei Argumente annimmt und gibt die Summe dieser Argumente zurück 

var adder = new Function('a', 'b', 'return a + b');

// Aufruf der Funktion
adder(2, 6);
// > 8

Die Argumente "a" und "b" sind formale Argument-Namen, welche im Funktions-Rumpf genutzt werden, "return a + b".

Unterschiede zwischen dem Function Konstruktor und Funktionsdeklarationen

Funktionen, die mit dem Function Konstruktor erstellt werden, erstellen keine Closures in ihrem Erstellungskontext; Sie werden immer im globalen Scope erstellt. Wenn diese ausgeführt wird, kann sie nur auf eigene lokale oder globale Variablen zugreifen, jedoch nicht auf die aus aus dem Erstellungskontext des Function Konstruktor aufzufes. Dieses ist der Unterschied zum Einsatz von eval mit Quelltext für einen Funktionsausdruck.

var x = 10;

function createFunction1() {
    var x = 20;
    return new Function('return x;'); // this |x| refers global |x|
}

function createFunction2() {
    var x = 20;
    function f() {
        return x; // this |x| refers local |x| above
    }
    return f;
}

var f1 = createFunction1();
console.log(f1());          // 10
var f2 = createFunction2();
console.log(f2());          // 20

Spezifikationen

Spezifikation Status Kommentar
ECMAScript 1st Edition (ECMA-262) Standard Initiale Definition. Implementiert in JavaScript 1.0.
ECMAScript 5.1 (ECMA-262)
Die Definition von 'Function' in dieser Spezifikation.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
Die Definition von 'Function' in dieser Spezifikation.
Standard  
ECMAScript Latest Draft (ECMA-262)
Die Definition von 'Function' in dieser Spezifikation.
Entwurf  

Browserkompatibilität

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Grundlegende Unterstützung Ja Ja1 Ja Ja Ja
arguments Ja Ja1 Ja Ja Ja
arity Nein Nein Nein Nein Nein Nein
caller Ja Ja18 Ja Ja
displayName ? ?13 ? ? ?
length Ja Ja1 Ja Ja Ja
name15 Ja1 Nein Ja Ja
prototype Ja Ja1 Ja Ja Ja
apply Ja Ja1 Ja Ja Ja
bind7 Ja4911.65.1
call Ja Ja1 Ja Ja Ja
isGenerator Nein Nein5 — 58 Nein Nein Nein
toSource Nein Nein1 Nein Nein Nein
toString Ja Ja1 Ja Ja Ja
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Grundlegende Unterstützung Ja Ja Ja4 Ja Ja Ja
arguments Ja Ja Ja4 Ja Ja Ja
arity Nein Nein Nein Nein Nein Nein Nein
caller Ja Ja Ja4 Ja Ja Ja
displayName ? ? ?14 ? ? ?
length Ja Ja Ja4 Ja Ja Ja
name Ja Ja Ja4 Ja Ja Ja
prototype Ja Ja Ja4 Ja Ja Ja
apply Ja Ja Ja4 Ja Ja Ja
bind41 Ja411.56 Ja
call Ja Ja Ja4 Ja Ja Ja
isGenerator Nein Nein Nein5 — 58 Nein Nein Nein
toSource Nein Nein Nein4 Nein Nein Nein
toString Ja Ja Ja4 Ja Ja Ja

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
Mitwirkende an dieser Seite: schlagi123, TDesjardins, StevenS77, Mingun
Zuletzt aktualisiert von: schlagi123,