-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path12-SpyOnFunctions.js
54 lines (34 loc) · 1.79 KB
/
12-SpyOnFunctions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// # Défi
// Ajoutez des capacités à une méthode précise sur un objet, tout en préservant son comportement d’origine : créez un espion qui garde la trace du nombre de fois que la fonction a été appelée.
// ## Exemple
// var spy = Spy(console, 'error')
// console.error('appel de console.error')
// console.error('appel de console.error')
// console.error('appel de console.error')
// console.log(spy.count) // 3
// ## Arguments
// `target` : un objet contenant la méthode `method`.
// `method` : une `String` indiquant le nom de la méthode de `target` à espionner.
// ## Conditions
// N’utilisez ni boucle (`for`, `while`…) ni `Array.prototype.forEach`
// Ne créez aucune fonction superflue
// ## Conseils
// Les fonctions ont un contexte (une valeur de this), une entrée (les arguments) et une sortie (la valeur de retour).
//Assurez vous que vous préservez tous ces aspects pour la fonction que vous espionnez.
// ## Base de travail
function Spy(target, method) {
// Le but est de compter le nombre de fois que la fonction est utilisée.
//Je définis la fonction à espionner.
const firstFunction = target[method];
//J'initialise un compteur que je vais incrémenter de 1 chaque fois que spiedFunction est utilisée.
let count = 0;
//J'ajoute l'incrémentation du compteur à chaque appel de la fonction originale en utilisant les mêmes arguments.
target[method] = function() {
count++;
//grâce à apply on appelle la première méthode avec les mêmes arguments.
return firstFunction.apply(this, arguments);
}
//Je retourne le compteur incrémenté sous la forme d'un objet.
return {count};
}
module.exports = Spy