self
jest tylko do odczytu właściwość, że może być bardziej elastyczna niż, a czasami stosowane na korzyść, w window
bezpośrednio. Dzieje się tak dlatego, że odwołanie self
zmienia się w zależności od kontekstu operacyjnego (w przeciwieństwie do window.self
, który istnieje tylko wtedy, gdy istnieje window
). Jest także doskonały do porównań, o czym wspominali inni.
Na przykład, jeśli używasz self
wewnątrz Pracownik internetowej (która mieszka we własnym wątku tła), self
rzeczywiście odwoływać WorkerGlobalScope.self
. Jeśli jednak użyjesz trybu self
w normalnym kontekście przeglądarki, po prostu zwrócisz odwołanie do Window.self
(ten, który ma document
, addEventListener()
i wszystkie inne rzeczy, które przywykliście widzieć).
TL; DR natomiast .self
w window.self
nie będzie istnieć, jeśli window
nie istnieje, za pomocą self
z własnej woli do punktu Window.self
w tradycyjnym kontekście okno/przeglądarki lub WorkerGlobalScope.self
w kontekście pracownika internetowej.
Jak zwykle, MDN ma świetny zapis na ten temat in their JavaScript docs. :)
Notatka: Wykorzystanie self
tutaj nie należy mylić ze wspólnym JS wzór deklarowania zmiennej lokalnej: var self = this
utrzymania odniesienie do kontekstu po włączeniu.
Możesz przeczytać więcej na ten temat tutaj: Getting Out of Binding Situations in JavaScript.
Podczas korzystania z Web Workers self i window to nie to samo. Patrz [http://stackoverflow.com/questions/11219775/global-variable-in-web-worker][1] [1]: http://stackoverflow.com/questions/11219775/global -variable-in-web-worker – user1872904