Named Parameters
Les paramètres ordonnées nuisent à la lisibilité du code et au refactoring.
1
class Customer {
2
constructor(firstName, lastName, email, phoneNumber) {
3
this.firstName = firstName;
4
this.lastName = lastName;
5
this.email = email;
6
this.phoneNumber = phoneNumber;
7
}
8
}
9
​
10
new Customer('Foo', null, null, '123');
Copied!
Malheureusement, les named parameters n'existent pas mais une solution de contournement native est possible grâce au destructuring.

Named Parameters avec un seul paramètre.

1
class Customer {
2
constructor(args) {
3
this.firstName = args.firstName;
4
this.lastName = args.lastName;
5
this.email = args.email;
6
this.phoneNumber = args.phoneNumber;
7
}
8
}
9
​
10
new Customer({
11
firstName: 'Foo',
12
phoneNumber: '123'
13
});
Copied!
... mais cette approche n'est pas très IDE-friendly. L'utilisateur de la classe ne verra pas clairement les paramètres attendus.

Destructuring

1
class Customer {
2
constructor(args = {}) {
3
4
const {firstName, lastName, email, phoneNumber = null} = args;
5
6
this.firstName = firstName;
7
this.lastName = lastName;
8
this.email = email;
9
this.phoneNumber = phoneNumber;
10
}
11
}
Copied!
Hop ! On gagne l'initialisation des valeurs par défaut.
Ou encore mieux :
1
class Customer {
2
constructor({firstName, lastName, email, phoneNumber = null} = {}) {
3
this.firstName = firstName;
4
this.lastName = lastName;
5
this.email = email;
6
this.phoneNumber = phoneNumber;
7
}
8
}
Copied!

Recyclage

Pour des objets peu complexes, ce constructeur nous évite d'implémenter des "factories".
1
const customer = new Customer({firstName: 'Foo'});
2
​
3
const customerFromJson = new Customer(JSON.parse(data));
4
​
5
const customerCopy = new Customer(customer);
Copied!