MostlyRenegade
100
  • Najlepsze
  • Wszystkie komentarze
orkin2913
orkin2913
@diofantos: nie będzie. Mało kto zdaje sobie z tego sprawę, ale świat webowy jest na tyle specyficzny, że próba wejścia w niego jakiegokolwiek języka zniszczyłaby go. Głównym problemem jest kompatybilność wsteczna - w Javie, C# czy każdym innym „normalnym” języku jak twórcom coś się nie podoba, to wyrzucają to z języka i wydają nową wersję kompilatora. W przypadku JSa nie można tak zrobić bo kod musi działać i na starych
76
p.....k
@oslet: oglądałeś to całe? ( ͡º ͜ʖ͡º) bo chyba przeoczyłeś kilka przypadków
30
p.....k
@oslet: dokładnie - wystarczy być doświadczonym developerem JS i znać te przypadki, a wszystko jest jasne i klarowne. Świetny język, świetna technologia ( ͡° ͜ʖ ͡°)
15
MostlyRenegade
@diofantos: to tak jest, gdy się z zabawki chce zrobić prawdziwe narzędzie ( ͡° ͜ʖ ͡°)
14
diofantos
Treść przeznaczona dla osób powyżej 18 roku życia...
11
oslet
@MostlyRenegade no tak, trudno pojąc że this wewnątrz metody obiektu reprezentuje ten obiekt a poza metodami obiektu reprezentuje window (czyli tak naprawdę też obiekt tyle że "domyślny", globalny).
10
oslet
@powaznyczlowiek no chyba nie przeoczyłem, bo co niby? Strict tylko wyłącza widoczność globalnego this/window nic poza tym (w kontekście o którym mowa). A żale o () => wynikają tylko z niezrozumienia czym jest ta konstrukcja.
6
p.....k
@kumba: xD

Wy chyba nie rozumiecie, że to z tych wszystkich "wystarczy nie używać...", "wystarczy rozumieć że..." jest największa beka xD

W normalnym języku programowania bierzesz wersję X i w tej wersji wszystko działa w dany sposób i koniec - używasz, masz dokumentację i po temacie.

A w JavaScript masz coś co działa tak, ale może też działać inaczej, ale "należy też pamiętać że" - i tak w nieskończoność, aż
6
kumba
kumba
@oslet: @powaznyczlowiek: wystarczy nie używać this (poza powiedzmy es6 classes) Tak samo powstało pierdyliard memów o tym jakie dziwne wyniki zwraca ==, a to po prostu legacy szajs którego żaden linter nie przepuści.
5
Ranmus
@powaznyczlowiek @oslet

Pomyliliście dwie kwestie: Za oficjalną dokumentacją ECMA 262, punkt 10 o kontekście wykonania - każde wywołanie funkcji czy też konstruktora tworzy zupełnie nowy kontekst wykonania, w ramach którego określany jest scope czy też determinacja this. Zagnieżdżanie nie ma nic do determinacji this. Istotą jest tutaj co wywołuje funkcję:

The caller provides the this value. If the this value provided by the caller is not an object (including
the case where it
3
Ranmus
Treść przeznaczona dla osób powyżej 18 roku życia...
2
oslet
@powaznyczlowiek no przecież doit NIE JEST metodą obiektu anObject xD tylko checkThis nią jest. Chyba w każdym popularnym języku programowania, jak w metodzie zagniezdzisz funkcje to this w niej nie będzie już odwoływało się do obiektu.
2
Ranmus
@MostlyRenegade: Z tym spodziewaniem się, to się akurat zgodzę, bo języki programowania z zaimplementowanym tradycyjnym oop mogą sugerować takie działanie, a jak dobrze wiemy, w JS w wielu kwestiach pewne rzeczy są inaczej zaimplementowane, np. obiektówka przez prototypowanie. Ja w swoich wypowiedziach piłem bardziej do tego, że gość z filmu sie zesrał nad magią... która jest opisana w specyfikacji języka. :) Ja kodziłem zawodowo w C#, PHP, teraz JS i
2
Ranmus
@powaznyczlowiek: Kuźwa, a ty dalej swoje. :P Kontekst wykonania nie ma związku z zagnieżdżaniem JS. Ty tego nie wiesz i typ z filmu też nie, osletowi, też się pofandzoliło. Ile jeszcze o tym zagnieżdżaniu będziecie pisać? Kontekst wykonania zależny jest tylko i wyłącznie od tego co wywołuje funkcję, a nie jaki kontekst aktualnie ma to coś co wywołuje. Jeśli nie jest to odpowiedni obiekt, to this zawsze będzie resetowany do
2
Ranmus
Jeszcze na szybko przykład dla pewności, co sobie można w przeglądarce czy też na repl.it odpalić. Za oficjalną specyfikacją dot. kontekstu wykonania, że nie jest przekazywany przez scoping itd., lecz jest tworzony każdorazowo, nawet w przypadku rekursywnego wywołania funkcji i ważnym jest co wywołuje daną funkcję to dla kodu:

const global = this;

let x;

x
1
Ranmus
@MostlyRenegade: this pokazuje nie na x, tylko {}. Inaczej. Za pierwszym razem pokazuje się false, bo przy pierwszym wywoływaniu x'a callerem jest {}, który jest obiektem prawidłowym do zbindowania thisa w x. Kolejne wywołania x'a są realizowane przez x'a, który jest funkcją, która nie jest bindowalna do thisa, więc kontekst jest resetowany do globala.
1
Ranmus
Jeszcze dopowiem, że funkcja strzałkowa (i to wynika ze specyfikacji i zamierzenia jej działania w JS) jest wykonywana w ramach aktualnego kontekstu wykonania (nie jest tworzony nowy kontekst), więc jest niebindowalna i this jest tutaj zachowywany z "poziomu wyżej".
1
p.....o
p.....o
Treść przeznaczona dla osób powyżej 18 roku życia...
0
elektryk91
@MostlyRenegade: może waszym problemem jest, że wy dalej używacie this poza obiektami klas?
0