Skip to content

Commit 2d480cd

Browse files
committed
docs: decorators & meta programming
1 parent 1c2e1eb commit 2d480cd

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#### 5.4. Decorators and Meta-Programming
2+
3+
Decorators and meta-programming are advanced JavaScript features that enable you to modify the behavior of classes, methods, and properties. These techniques provide powerful tools for creating reusable, clean, and maintainable code.
4+
5+
##### Decorators in ES6
6+
7+
Decorators allow you to attach additional behavior to classes, methods, or properties. They are often used for aspects like logging, validation, access control, and more.
8+
9+
**Example:**
10+
11+
Suppose you want to create a logging decorator to log method calls:
12+
13+
```javascript
14+
function logMethod(target, key, descriptor) {
15+
const originalMethod = descriptor.value;
16+
17+
descriptor.value = function (...args) {
18+
console.log(`Calling method ${key} with arguments ${args}`);
19+
return originalMethod.apply(this, args);
20+
};
21+
22+
return descriptor;
23+
}
24+
25+
class Calculator {
26+
@logMethod
27+
add(a, b) {
28+
return a + b;
29+
}
30+
}
31+
32+
const calc = new Calculator();
33+
calc.add(3, 5);
34+
```
35+
36+
In this example, the `logMethod` decorator logs method calls and their arguments. When the `add` method of the `Calculator` class is called, it's automatically logged.
37+
38+
##### Reflect API
39+
40+
The Reflect API is part of meta-programming in JavaScript, allowing you to interact with objects and classes programmatically. It can be used for tasks like intercepting object operations and creating proxy objects.
41+
42+
**Example:**
43+
44+
```javascript
45+
const handler = {
46+
get(target, prop, receiver) {
47+
console.log(`Getting property ${prop}`);
48+
return Reflect.get(target, prop, receiver);
49+
},
50+
};
51+
52+
const obj = new Proxy({}, handler);
53+
54+
obj.value = 42;
55+
console.log(obj.value); // Logs the property access
56+
57+
obj.undefinedProperty; // Logs the property access
58+
```
59+
60+
In this example, we use the Reflect API to intercept property access and log it.
61+
62+
##### Use Cases
63+
64+
Decorators and meta-programming are valuable for various tasks, including:
65+
66+
- **Logging**: You can create logging decorators to log method calls or property accesses.
67+
- **Validation**: Decorators can validate input or output data.
68+
- **Access Control**: You can use decorators to control access to certain methods or properties.
69+
- **Object Operations**: Meta-programming allows you to intercept object operations and customize behavior.
70+
71+
#### Benefits
72+
73+
- Decorators and meta-programming enhance code readability and maintainability by separating concerns.
74+
- They offer powerful tools for creating reusable and clean code with additional behavior attached to classes, methods, or properties.
75+
76+
Mastering decorators and meta-programming can greatly improve your ability to create maintainable and flexible code. These techniques are valuable for implementing cross-cutting concerns and improving code organization.

0 commit comments

Comments
 (0)