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/99-js-misc/01-proxy/03-observable/solution.md
+6-7Lines changed: 6 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,17 +1,16 @@
1
1
A solução consiste em duas partes:
2
2
3
-
4
-
1. Sempre que `.observe(handler)` for chamado, precisamos lembrar do manipulador em algum lugar, para ser capaz de chamá-lo depois. Podemos armazenar os manipuladores no próprio objeto, usando nosso symbol como chave da propriedade.
5
-
2. Precisamos de um proxy com um `set` para chamar todos os manipuladores caso de aconteça qualquer alteração.
3
+
1. Sempre que `.observe(handler)` for chamado, precisamos lembrar handler em algum lugar, para ser possível chamá-lo mais tarde. Podemos armazenar os handlers diretamente no objeto, usando nosso symbol como chave da propriedade.
4
+
2. Precisamos de um proxy com uma armadilha (trap) `set` para chamar os handlers no caso de alguma mudança.
6
5
7
6
```js run
8
7
let handlers =Symbol('handlers');
9
8
10
9
functionmakeObservable(target) {
11
-
// 1. inicializa o armazenamento de manipuladores
10
+
// 1. Inicializa o armazenamento de manipuladores
12
11
target[handlers] = [];
13
12
14
-
// Armazena a função manipuladora no array para futuras chamadas
13
+
// Armazena a função handler no array para futuras chamadas
15
14
target.observe=function(handler) {
16
15
this[handlers].push(handler);
17
16
};
@@ -20,8 +19,8 @@ function makeObservable(target) {
20
19
returnnewProxy(target, {
21
20
set(target, property, value, receiver) {
22
21
let success =Reflect.set(...arguments); // Encaminha a operação para o objeto
23
-
if (success) { // Se não houver erro ao definir a propriedade
24
-
// chama rodos os manipuladores
22
+
if (success) { // Se não houve erro ao definir a propriedade
Em outras palavras, um objeto retornado por makeObservable é como o original, mas também tem o método `observe(handler)` que define a função `handler`a ser chamada em qualquer alteração de propriedade.
23
+
Em outras palavras, um objeto retornado por `makeObservable` é exatamente como o original, mas também possui o método `observe(handler)` que define a função `handler`para ser chamada em qualquer alteração de propriedade.
24
24
25
25
Sempre que uma propriedade muda, `handler(key, value)` é chamado com o nome e o valor da propriedade.
26
26
27
-
P.S. Nessa tarefa, preocupe-se apenas com a escrita em uma propriedade. Outras operações podem ser implementadas de maneira semelhante.
27
+
P.S. Nesta tarefa, preocupe-se apenas com a escrita em uma propriedade. Outras operações podem ser implementadas de maneira semelhante.
0 commit comments