Skip to content

Commit 2d2a59c

Browse files
committed
1.14.1
1 parent 702f878 commit 2d2a59c

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

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

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,7 @@ Past `get` je zde „průhledná“, vrací původní vlastnost a nic jiného ne
690690

691691
Vypadá to, že je všechno v pořádku. Učiňme však tento příklad trochu složitějším.
692692

693-
Po zdědění jiného objektu `admin` z objektu `uživatel` můžeme pozorovat nesprávné chování:
693+
Po zdědění jiného objektu `správce` z objektu `uživatel` můžeme pozorovat nesprávné chování:
694694

695695
```js run
696696
let uživatel = {
@@ -707,31 +707,31 @@ let uživatelProxy = new Proxy(uživatel, {
707707
});
708708

709709
*!*
710-
let admin = {
710+
let správce = {
711711
__proto__: uživatelProxy,
712-
_jméno: "Admin"
712+
_jméno: "Správce"
713713
};
714714

715-
// Očekáváme: Admin
716-
alert(admin.jméno); // vypíše: Host (?!?)
715+
// Očekáváme: Správce
716+
alert(správce.jméno); // vypíše: Host (?!?)
717717
*/!*
718718
```
719719

720-
Načtení `admin.jméno` by mělo vrátit `"Admin"`, ne `"Host"`!
720+
Načtení `správce.jméno` by mělo vrátit `"Správce"`, ne `"Host"`!
721721

722722
V čem je problém? Udělali jsme snad něco špatně s dědičností?
723723

724724
Pokud však odstraníme proxy, bude všechno fungovat tak, jak očekáváme.
725725

726726
Problém je ve skutečnosti v proxy na řádku `(*)`.
727727

728-
1. Když načítáme `admin.jméno`, objekt `admin` takovou vlastnost nemá, a proto hledání přejde k jeho prototypu.
728+
1. Když načítáme `správce.jméno`, objekt `správce` takovou vlastnost nemá, a proto hledání přejde k jeho prototypu.
729729
2. Prototypem je `uživatelProxy`.
730730
3. Když načítáme vlastnost `jméno` z proxy, spustí se jeho past `get` a na řádku `(*)` ji vrátí z původního objektu jako `cíl[vlastnost]`.
731731

732732
Volání `cíl[vlastnost]`, když `vlastnost` je getter, spustí kód tohoto getteru v kontextu `this=cíl`. Výsledkem je tedy `this._jméno` z původního objektu `cíl`, což je: z objektu `uživatel`.
733733

734-
Abychom takové situace opravili, potřebujeme `příjemce`, třetí argument pasti `get`. Ten udržuje správné `this`, které bude předáno getteru. V našem případě to je `admin`.
734+
Abychom takové situace opravili, potřebujeme `příjemce`, třetí argument pasti `get`. Ten udržuje správné `this`, které bude předáno getteru. V našem případě to je `správce`.
735735

736736
Jak předat kontext getteru? Pro běžnou funkci bychom mohli použít `call/apply`, ale tohle je getter, ten se „nevolá“, jenom se k němu přistupuje.
737737

@@ -748,25 +748,25 @@ let uživatel = {
748748
};
749749

750750
let uživatelProxy = new Proxy(uživatel, {
751-
get(cíl, vlastnost, příjemce) { // příjemce = admin
751+
get(cíl, vlastnost, příjemce) { // příjemce = správce
752752
*!*
753753
return Reflect.get(cíl, vlastnost, příjemce); // (*)
754754
*/!*
755755
}
756756
});
757757

758758

759-
let admin = {
759+
let správce = {
760760
__proto__: uživatelProxy,
761-
_jméno: "Admin"
761+
_jméno: "Správce"
762762
};
763763

764764
*!*
765-
alert(admin.jméno); // Admin
765+
alert(správce.jméno); // Správce
766766
*/!*
767767
```
768768

769-
Nyní je getteru předán `příjemce`, který si udržuje odkaz na správné `this` (což je `admin`), pomocí `Reflect.get` na řádku `(*)`.
769+
Nyní je getteru předán `příjemce`, který si udržuje odkaz na správné `this` (což je `správce`), pomocí `Reflect.get` na řádku `(*)`.
770770

771771
Tuto past můžeme ještě zkrátit:
772772

0 commit comments

Comments
 (0)