1
+ /*
2
+ _____________________________________
3
+ https://github.com/kenysdev
4
+ 2024 - JavaScript
5
+ _______________________________________
6
+ #24 DECORADORES
7
+ ---------------------------------------
8
+ * EJERCICIO:
9
+ * Explora el concepto de "decorador" y muestra cómo crearlo
10
+ * con un ejemplo genérico.
11
+ *
12
+ * DIFICULTAD EXTRA (opcional):
13
+ * Crea un decorador que sea capaz de contabilizar cuántas veces
14
+ * se ha llamado a una función y aplícalo a una función de tu elección.
15
+ */
16
+ // ________________________________________________________
17
+ function myDecorator ( func ) {
18
+ return function ( ...args ) {
19
+ console . log ( "\nAntes de que se llame a la función." ) ;
20
+ func ( ...args ) ;
21
+ console . log ( "Después de llamarla." ) ;
22
+ } ;
23
+ }
24
+
25
+ function sayHello ( firstName , lastName ) {
26
+ console . log ( `Hola, ${ firstName } ${ lastName } !` ) ;
27
+ }
28
+
29
+ const decoratedSayHello = myDecorator ( sayHello ) ;
30
+ decoratedSayHello ( "Zoe" , "Roy" ) ;
31
+
32
+ console . log ( "\n______________________" ) ;
33
+ function classDecorator ( Class ) {
34
+ return class extends Class {
35
+ greet ( ) {
36
+ console . log ( "\nAntes de llamar al método" ) ;
37
+ super . greet ( ) ;
38
+ console . log ( "Después de llamar al método" ) ;
39
+ }
40
+ } ;
41
+ }
42
+
43
+ // ________________________________________________________
44
+ console . log ( "DIFICULTAD EXTRA" ) ;
45
+
46
+ function countCalls ( func ) {
47
+ const wrapper = function ( ...args ) {
48
+ wrapper . calls ++ ;
49
+ func ( ...args ) ;
50
+ console . log ( `Ha sido llamada ${ wrapper . calls } veces.` ) ;
51
+ } ;
52
+ wrapper . calls = 0 ;
53
+ return wrapper ;
54
+ }
55
+
56
+ const functionA = countCalls ( function ( funcName ) {
57
+ console . log ( `\nLa función '${ funcName } ':` ) ;
58
+ } ) ;
59
+
60
+ const functionB = countCalls ( function ( funcName , example ) {
61
+ console . log ( `\nLa función ${ funcName } - ${ example } :` ) ;
62
+ } ) ;
63
+
64
+ functionA ( "A" ) ;
65
+ functionA ( "A" ) ;
66
+ functionA ( "A" ) ;
67
+
68
+ functionB ( "B" , "args" ) ;
69
+ functionB ( "B" , "args" ) ;
70
+
0 commit comments