Skip to content

Commit 0147b16

Browse files
committed
review 1
1 parent a0b3bd9 commit 0147b16

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

1-js/99-js-misc/01-proxy/article.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
# Proxy и Reflect
33

4-
Объект *proxy* служит обёрткой для другого объекта, а также перехватывает и (опционально) обрабатывает разные действия, например чтение/запись свойств и другие, производимые с оригинальным объектом.
4+
Объект *прокси* "оборачивается" вокруг другого объекта и может перехватывать (и, при желании, самостоятельно обрабатывать) разные действия с ним, например чтение/запись свойств и другие.
55

66
Прокси используются во многих библиотеках и некоторых браузерных фреймворках. В этой главе мы увидим много случаев применения прокси в решении реальных задач.
77

@@ -14,7 +14,7 @@ let proxy = new Proxy(target, handler)
1414
- `target` -- это объект, который обёртывается, может быть чем угодно, включая функции.
1515
- `handler` -- объект с "ловушками" ("traps"): методами, которые перехватывают разные операции, например `get` при чтении свойства, `set` при записи свойства и так далее.
1616

17-
Если в `handler` объекта `proxy` имеется соответствующая "ловушка", то она срабатывает, и прокси имеет возможность как-то среагировать, иначе же действовать будет уже оригинальный объект из `target`.
17+
При операциях над `proxy`, если в `handler` имеется соответствующая "ловушка", то она срабатывает, и прокси имеет возможность как-то среагировать, иначе действие будет совершено над оригинальным объектом `target`.
1818

1919
В качестве примера давайте для начала создадим прокси без всяких ловушек:
2020

@@ -30,7 +30,7 @@ alert(proxy.test); // 5, мы также можем прочитать его и
3030
for(let key in proxy) alert(key); // test, итерация работает (3)
3131
```
3232

33-
Так как нет ловушек, то все операции на `proxy` в итоге применяются к оригинальному объекту `target`.
33+
Так как нет ловушек, то все операции на `proxy` применяются к оригинальному объекту `target`.
3434

3535
1. Запись свойства `proxy.test=` устанавливает значение на `target`.
3636
2. Чтение свойства `proxy.test` возвращает значение из `target`.
@@ -42,13 +42,13 @@ for(let key in proxy) alert(key); // test, итерация работает (3)
4242

4343
Прокси -- это особенный объект, у него нет собственных свойств. С пустым `handler` он просто перенаправляет все операции на `target`.
4444

45-
Если мы хотим придать ему какую-то магическую силу, то следует добавить ловушки.
45+
Чтобы активировать его возможности, добавим ловушки.
4646

4747
Вот список внутренних методов объектов из [спецификации Proxy](https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots). Прокси может перехватывать вызов любого из них, нужно только добавить соответствующий обработчик в `handler`.
4848

4949
В таблице ниже:
50-
- **Внутренний метод** -- название операции над объектом, определённое в спецификации. Например, `[[Get]]` -- это имя внутреннего метода для чтения свойства объекта. В спецификации описывается, как это должно быть реализовано, до мельчайших низкоуровневых подробностей.
51-
- **Ловушка** -- это имя метода, который мы можем добавить в параметр `handler` при создании прокси. Этот метод будет действовать как ловушка, перехватывая операции над объектом и позволяя совершать над ним какие-то дополнительные действия.
50+
- **Внутренний метод** -- название операции над объектом, определённое в спецификации. Например, `[[Get]]` -- это имя внутреннего (используемого только внутри спецификации) метода для чтения свойства объекта. В спецификации описывается, как это должно быть реализовано, до мельчайших низкоуровневых подробностей.
51+
- **Ловушка** -- это имя метода, который мы можем добавить в параметр `handler` при создании прокси. Этот метод будет действовать как ловушка, перехватывающая данную операцию и позволяющая совершать какие-то дополнительные действия.
5252

5353

5454
| Внутренний метод | Ловушка | Срабатывает при... |
@@ -68,15 +68,15 @@ for(let key in proxy) alert(key); // test, итерация работает (3)
6868
| `[[OwnPropertyKeys]]` | `ownKeys` | [Object.keys](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/keys), [Object.getOwnPropertyNames](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyNames), [Object.getOwnPropertySymbols](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertySymbols), итерация по ключам |
6969

7070
```warn header="Инварианты"
71-
JavaScript предполагает, что при реализации внутренних методов и ловушек в коде будут выполнены определённые условия -- инварианты.
71+
JavaScript налагает некоторые условия - инварианты на реализацию внутренних методов и ловушек.
7272
7373
Большинство из них касаются возвращаемых значений:
7474
- `[[Set]]` должен возвращать `true`, если значение было успешно записано, иначе `false`.
7575
- `[[Delete]]` должен возвращать `true`, если значение было успешно удалено, иначе `false`.
76-
- ...и так далее, мы ещё столкнёмся с этим в примерах ниже.
76+
- ...и так далее, мы увидим больше в примерах ниже.
7777
78-
Но есть и другие условия:
79-
- `[[GetPrototypeOf]]`, применённый к прокси, должен возвращать то же значение, что и метод `[[GetPrototypeOf]]`, применённый к оригинальному объекту.
78+
Есть и другие инварианты, например:
79+
- метод `[[GetPrototypeOf]]`, применённый к прокси, должен возвращать то же значение, что и метод `[[GetPrototypeOf]]`, применённый к оригинальному объекту.
8080
8181
Другими словами, чтение прототипа объекта `proxy` всегда должно возвращать прототип оригинального объекта. Ловушка `getPrototypeOf` может перехватывать эту операцию, но в любом случае должна выполнять указанное условие, а не делать что-то сумасшедшее.
8282

0 commit comments

Comments
 (0)