You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/10-bind/article-fr.md
+69-1Lines changed: 69 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -204,4 +204,72 @@ for (let key in user) {
204
204
```
205
205
206
206
Les librairies JavaScript fournissent aussi des fonctions partiques pour les liaisons de masse, e.g. [_.bindAll(object, methodNames)](https://lodash.com/docs#bindAll) avec lodash.
207
-
````
207
+
````
208
+
209
+
## Les fonctions partielles
210
+
211
+
Jusqu'à maintenant nous avons parlé uniquement de lier `this`. Allons plus loin.
212
+
213
+
Nous pouvons lier `this`, mais aussi des arguments. C'est rarement utilisé, mais ça peut être utile.
214
+
215
+
La syntaxe complète de `bind` :
216
+
217
+
```js
218
+
let bound = func.bind(context, [arg1], [arg2], ...);
219
+
```
220
+
221
+
Elle permet de lié le contexte en tant que `this` et de démarrer les arguments de la fonction.
222
+
223
+
Par exemple, nous avons une fonction de multiplication `mul(a, b)` :
224
+
225
+
```js
226
+
function mul(a, b) {
227
+
return a * b;
228
+
}
229
+
```
230
+
231
+
Utilisons `bind` pour créer une fonction `double` sur cette base :
232
+
233
+
```js run
234
+
function mul(a, b) {
235
+
return a * b;
236
+
}
237
+
238
+
*!*
239
+
let double = mul.bind(null, 2);
240
+
*/!*
241
+
242
+
alert( double(3) ); // = mul(2, 3) = 6
243
+
alert( double(4) ); // = mul(2, 4) = 8
244
+
alert( double(5) ); // = mul(2, 5) = 10
245
+
```
246
+
247
+
L'appel à `mul.bind(null, 2)` créer une nouvelle fonction `double` qui transmet les appels à `mul`, corrigeant `null` dans le contexte et `2` comme premier argument. Les arguments sont passés "tel quel" plus loin.
248
+
249
+
Ça s'appelle [l'application de fonction partielle](https://en.wikipedia.org/wiki/Partial_application) -- nous créeons une nouvelle fonction en corrigeant certains paramètres d'une fonction existante.
250
+
251
+
Veuillez noter que nous n'utilisons actuellement pas `this` ici. Mais `bind` en a besoin, donc nous devrions mettre quelque chose dedans comme `null`.
252
+
253
+
La fonction `triple` dans le code ci-dessous triple la valeur :
254
+
255
+
```js run
256
+
function mul(a, b) {
257
+
return a * b;
258
+
}
259
+
260
+
*!*
261
+
let triple = mul.bind(null, 3);
262
+
*/!*
263
+
264
+
alert( triple(3) ); // = mul(3, 3) = 9
265
+
alert( triple(4) ); // = mul(3, 4) = 12
266
+
alert( triple(5) ); // = mul(3, 5) = 15
267
+
```
268
+
269
+
Pourquoi faisons nous généralement un fonction partielle ?
270
+
271
+
L'avantage de faire ça est que on peut créer une fonction indépendante avec un nom lisible (`double`, `triple`). Nous pouvons les utiliser et ne pas fournir de premier argument à chaque fois comme c'est corrigé par `bind`.
272
+
273
+
Dans d'autres cas, les fonctions partielles sont utiles quand nous avons des fonctions vraiment génériques et que nous voulons une variante moins universelle pour des raisons pratiques.
274
+
275
+
Par exemple, nous avons une fonction `send(from, to, text)`. Alors, dans un objet `user` nous pourrions vouloir en utiliser une variante partielle : `sendTo(to, text)` qui envoie depuis l'utilisateur actuel.
0 commit comments