Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] event w js.
Forum PHP.pl > Forum > Przedszkole
-Anonymous-
Witam, nie bardzo rozumiem tej składni, która bardzo często przewija się przez wszelkiej maści kursy i porady:

Kod
function test(e) {
e = e || event
}


Mam rozumieć że w przypadku nie istnienia e, przypisany zostanie "event". Jeżeli dobrze rozumuje, to już tego nie ogarniam oO. Przecież jeżeli zadeklarowaliśmy argument e, to przy wywoływaniu funkcji musimy coś mu przypisać, w takim razie cała linia wewnątrz jest bezużyteczna oO. Prosiłbym o rzeczowe wyjaśnienia.
Z góry dziękuję smile.gif
trueblue
Cytat(-Anonymous- @ 19.04.2014, 19:34:07 ) *
Przecież jeżeli zadeklarowaliśmy argument e, to przy wywoływaniu funkcji musimy coś mu przypisać

Nie musimy.
Możemy wywołać funkcję bez przekazania parametru lub przekazać zmienną o niezdefiniowanej wartości.
W takim przypadku oczywiście sens będzie to miało, jeśli zmienna event będzie zdefiniowana.
Często spotykana konstrukcja to:
  1. zmienna=zmienna||[];

co zapewnia, że w przypadku niezdefiniowanej zmiennej przyjmie postać pustej tablicy (oczywiście założeniem jest, że "zmienna" ma być tablicą), i nie musimy tworzyć warunku:
  1. if(zmienna!==undefined){
  2. //zrób to co trzeba ze zmienną
  3. }
-Anonymous-
W takim razie, nasuwa się pytanie. Co można zadeklarować zamiast event, jeżeli takie przykłady są zazwyczaj podawane do poruszania obiektami itd. Nie widzę wtedy sensu takiej gwarancji, ponieważ argument można przypisać przed wywołaniem funkcji i w przypadku używania event nie widzę jakiegoś zamiennika(czegoś innego), który mógłby znajdować się w argumencie e. Jedyną możliwością jak dla mnie jest event i cały skrypt odwołuje się do tego zdarzenia, co oznacza iż cała ta linia nie ma najmniejszego sensu oO.
Crozin
Taki potworek jest konieczny ponieważ IE obsługiwał zdarzenia inaczej niż pozostałe przeglądarki. Nie przekazywał obiektu zdarzenia jako argumentu funkcji, a tworzył globalną zmienną event z owym obiektem. Przez to kod JS, który miał być kompatybilny ze wszystkim przeglądarkami musiał stosować takie sztuczki. W normalnych przeglądarkach wyrażenie e = e || event; w praktyce przyjmowało postać e = e || undefined, w efekcie czego kończyliśmy na e = e. Zaś w przypadku IE wyrażenie to wyglądało następująco e = undefined || window.event, czyli ostatecznie e = window.event.
trueblue
Ja nie widzę sensu wiązania tego przykładu z poruszaniem obiektami, jak i ze zdarzeniami, wyobraź sobie, że te zmienne nazywają się "a" i "b".

Argument funkcji można przypisać przed wywołaniem funkcji, ale jak pisałem wcześniej może się zdarzyć, że będzie miał wartość niezdefiniowaną.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.