In JavaScript kann man die Liste der Argumente abrufen, die über arguments, also ein Array-ähnliches Objekt, an eine Funktion übergeben werden:

>> function fun(a, b, c) { console.log(arguments) };  
undefined
>> fun(1, 2, 3);
[1, 2, 3]

Gibt es eine Möglichkeit, ein Objekt zu erhalten, das auch den formalen Namen jedes Arguments enthält?
Das heißt, wenn man die Funktion wie oben aufruft, sollte man bekommen:

{a = 1, b = 2, c = 3}
3
etuardu 8 Okt. 2012 im 18:07

5 Antworten

Beste Antwort

Bei einigen Browsern können Sie die Argumentnamen aus den definierten Argumenten basierend auf der toString Darstellung Ihrer Funktion wie in dieser Frage beschrieben. Sie können dies verwenden, um die Werte selbst zuzuordnen.

Beachten Sie, dass nicht alle Parameter benannt werden müssen. Wenn ich beispielsweise Ihre Funktion oben aufrufen würde, fun(1, 2, 3, 4) würde der letzte Parameter keinem Namen zugeordnet, wäre aber dennoch über arguments zugänglich.

4
Community 23 Mai 2017 im 12:09

Ich würde dies nicht empfehlen, da Sie möglicherweise Daten verlieren, wenn der Code minimiert und die Funktionsargumente vom Kompressor / Obfuscator umbenannt werden.

4
Inferpse 8 Okt. 2012 im 14:13

Die Namen der formalen Parameter sind nicht zur Laufzeit verfügbar ( edit , außer als Teil des Textes im toString() -Wert der Funktion, wie @David Hedlund hervorhebt), sondern das Argument Werte sind über das Objekt arguments verfügbar. Wenn Sie den Code in eine Funktion schreiben, kennen natürlich die Namen, sodass Sie ein solches Objekt selbst erstellen können:

function foo(a, b, c) {
  return {a: a, b: b, c: c};
}
1
Pointy 8 Okt. 2012 im 14:10

Das gibt es nicht. Sie könnten Ihre Argumente als Objekt übergeben.

1
Daniel A. White 8 Okt. 2012 im 14:09

Gibt es eine Möglichkeit, ein Objekt zu erhalten, das auch den formalen Namen jedes Arguments enthält?

Nein. Formale Parameter sind im Wesentlichen dieselben wie deklarierte Variablen. Jedem Ausführungskontext ist ein Variablenobjekt (ed3) oder ein Umgebungsdatensatz (ed 5) zugeordnet, dessen Eigenschaften deklarierte Variablen und formale Parameter sind.

Sie können nicht auf dieses Objekt zugreifen und es daher nicht überprüfen, um festzustellen, welche Eigenschaften es hat.

Im globalen Ausführungskontext werden Variablen zu Eigenschaften des globalen Objekts, jedoch nicht in einem Funktionsausführungskontext. Und es gibt keine formale Methode, um zwischen Variablen und anderen Eigenschaften des globalen Objekts zu unterscheiden.

0
RobG 8 Okt. 2012 im 14:19