466 Stimmen

Gibt es eine Möglichkeit, benannte Parameter in einem Funktionsaufruf in JavaScript anzugeben?

Ich finde die Funktion der benannten Parameter in C# in einigen Fällen sehr nützlich.

calculateBMI(70, height: 175);

Was kann ich verwenden, wenn ich dies in JavaScript möchte?


Was ich nicht will, ist dies:

myFunction({ param1: 70, param2: 175 });

function myFunction(params){
  // Check if params is an object
  // Check if the parameters I need are non-null
  // Blah blah
}

Diesen Ansatz habe ich bereits verfolgt. Gibt es einen anderen Weg?

Ich habe kein Problem damit, eine beliebige Bibliothek dafür zu verwenden.

0voto

Ja Nun ja, irgendwie schon. Ich habe zwei Lösungen gefunden. Ich werde nur eine erklären.

Bei dieser Lösung verzichten wir allerdings auf Positionsargumente.

Wir können ein Objekt (fast identisch mit einer dict in Python ), um die Argumente zu übergeben.

In diesem Beispiel verwende ich die Funktion, um den Namen einer Bilddatei zu generieren:

// First we define our function with just ONE argument
function name_of_img(img_desc){

  // With this step, any undefined value will be assigned a value
  if(img_desc.size == undefined) {img_desc.size = "400x500"}
  if(img_desc.format == undefined) {img_desc.format = ".png"}

  console.log(img_desc.size + img_desc.format)
}

// Notice inside our function we're passing a dict/object

name_of_img({size: "200x250", format : ".jpg"})
// In Python name_of_img(size="200x250" , format="jpg")
// returns "200x250.jpg"

name_of_img({size: "1200x950"})
// In Python name_of_img(size="1200x950")
// returns "1200x950.png"

Wir können dieses Beispiel modifizieren, so dass wir auch Positionsargumente verwenden können, wir können es auch so modifizieren, dass nicht gültige Argumente übergeben werden können, ich denke, ich werde ein GitHub-Repository dazu erstellen.

-3voto

user234461 Punkte 1116

Im Gegensatz zu dem, was allgemein angenommen wird, können benannte Parameter in Standard-JavaScript der alten Schule (nur für boolesche Parameter) mit Hilfe einer einfachen, sauberen Kodierungskonvention implementiert werden, wie unten gezeigt.

function f(p1=true, p2=false) {
    ...
}

f(!!"p1"==false, !!"p2"==true); // call f(p1=false, p2=true)

Vorbehalte:

  • Die Reihenfolge der Argumente muss beibehalten werden - aber das Muster ist immer noch nützlich, da es deutlich macht, welches tatsächliche Argument für welchen formalen Parameter bestimmt ist, ohne dass man nach der Funktionssignatur suchen oder eine IDE verwenden muss.

  • Dies funktioniert nur bei Booleschen Werten. Allerdings bin ich sicher, dass ein ähnliches Muster für andere Typen mit JavaScript einzigartige Typ Coercion Semantik entwickelt werden könnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X