Skip to content

Commit 1c1ddf6

Browse files
committed
docs: translate section
1 parent 6197a76 commit 1c1ddf6

File tree

1 file changed

+46
-1
lines changed

1 file changed

+46
-1
lines changed

1-js/06-advanced-functions/10-bind/article-fr.md

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,4 +272,49 @@ L'avantage de faire ça est que on peut créer une fonction indépendante avec u
272272
273273
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.
274274
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.
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.
276+
277+
## Aller dans les partielles sans contexte
278+
279+
Que se passe t-il si nous voulions corriger certains arguments, mais pas le contexte `this` ?
280+
Par exemple, pour une méthode objet.
281+
282+
La fonction `bind` native ne permet pas ça. Nous ne pouvons pas juste omettre le contexte et aller directement aux arguments.
283+
284+
Heureusement, une fonction `partial` pour lié seulement les arguments peut être facilement implémentée.
285+
286+
Comme ça :
287+
288+
```js run
289+
*!*
290+
function partial(func, ...argsBound) {
291+
return function(...args) { // (*)
292+
return func.call(this, ...argsBound, ...args);
293+
}
294+
}
295+
*/!*
296+
297+
// Utilisation :
298+
let user = {
299+
firstName: "John",
300+
say(time, phrase) {
301+
alert(`[${time}] ${this.firstName}: ${phrase}!`);
302+
}
303+
};
304+
305+
// Ajoute une méthode partielle avec time corrigé
306+
user.sayNow = partial(user.say, new Date().getHours() + ':' + new Date().getMinutes());
307+
308+
user.sayNow("Hello");
309+
// Quelque chose du genre :
310+
// [10:00] John: Hello!
311+
```
312+
313+
Le résultat de l'appel `partial(func[, arg1, arg2...])` est une enveloppe `(*)` qui appelle `func` avec :
314+
- Le même `this` qu'il récupère (pour `user.sayNow` l'appel est `user`)
315+
- Alors il donne `...argsBound` -- les arguments provenant de l'appel de `partial` (`"10:00"`)
316+
- Alors il donne `...args` -- les arguments donnés à l'enveloppe (`"Hello"`)
317+
318+
Alors c'est simple à faire avec la spread syntaxe, pas vrai ?
319+
320+
Aussi il y une implémentation de [_.partial](https://lodash.com/docs#partial) prête à l'emploi dans les librairies lodash.

0 commit comments

Comments
 (0)