Autor | Zpráva | ||
---|---|---|---|
_es Profil |
#1 · Zasláno: 15. 9. 2009, 06:11:42 · Upravil/a: _es
V inom vlákne, pri debate o možnosti alebo nemožnosti odstránenia globálnej premennej alebo vlastnosti bol spomenutý rozdiel medzi nimi.
Prišiel som na niekoľko zaujímavých príkladov a po ich otestovaní je zrejmé, že rozdiel medzi globálnou premennou a globálnou vlastnosťou (vlastnosťou objektu window) nie je taký jednoduchý. V nasledujúcich príkladoch sú dve možnosti, buď bude odkaz otvorený v novom okne, alebo v tom istom okne podľa toho, či nastane pomenovanie okna. Funkčnosť niektorých príkladov sa líši v závislosti od použitého prehliadača. Pre lepší "zážitok" doporučujem pred otestovaním tipnúť výsledok. Príklad a (odkaz): <script> name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad b (odkaz): <script> window.name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad c (odkaz): <script> name = "x"; window.name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad d (odkaz): <script> window.name = "x"; name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad e (odkaz): <script> window.name = "x"; name = "y"; </script> <a href="http://google.com" target=x>google</a> Príklad f (odkaz): <script> name = "y"; window.name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad g (odkaz): <script> var name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad h (odkaz): <script> window.name = "x"; var name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad i (odkaz): <script> window.name = "x"; var name; </script> <a href="http://google.com" target=x>google</a> Príklad j (odkaz): <script> var name; window.name = "x"; </script> <a href="http://google.com" target=x>google</a> Príklad k (odkaz): <script> name = name; window.name = "x"; </script> <a href="http://google.com" target=x>google</a> |
||
_es Profil |
#2 · Zasláno: 15. 9. 2009, 10:45:09 · Upravil/a: _es
Asi sa to nikomu nechcelo testovať, tak tu je tabuľka, ako nastáva pomenovanie okna v jednotlivých prehliadačoch:
r - rovnaké okno n - nové okno a b c d e f g h i j k FF 3.5 n r n r r n n r r r n IE 8 r r r r n r n n n n r O 9.64 n r n r r n n n n n n Ch 3.0 r r r r n r n r r r r |
||
Yur4Y Profil |
#3 · Zasláno: 15. 9. 2009, 11:01:17
Vždy som si myslel, že zápis name a window.name je totožný (a odlišuje sa jedine var name), keď som sa hral s delete operátorom, aj mi to tak vychádzalo. Teraz som dosť mimo :-/
|
||
Chamurappi Profil |
#4 · Zasláno: 15. 9. 2009, 11:16:11 · Upravil/a: Chamurappi
Reaguji na _es:
Je to zajímavé. Děkuji za průzkum. Explorer 7 se na tvých příkladech chová stejně jako osmička. (Což tedy může být způsobeno tím, že jede osmička v quirku, ale pochybuji, že by režim měl na toto vliv.) |
||
_es Profil |
#5 · Zasláno: 15. 9. 2009, 11:34:19 · Upravil/a: _es
Ja si to vysvetľujem tak, že vlastnosť objektu window a globálna premenná s rovnakým menom sú vo všeobecnosti rozdielne veci.
A dodatočne tie rozdielne veci prehliadač zosúlaďuje. Pričom môže nastať viac možností: - jedna "vec" prepíše druhú - jedna "vec" len prekryje druhú pre rovnaký názov a obe zostávajú existovať - niečo medzi predchádzajúcimi možnosťami |
||
_es Profil |
#6 · Zasláno: 15. 9. 2009, 16:54:23 · Upravil/a: _es
Ešte jedna zaujímavosť.
Je v nasledujúcom kóde v súbore HTML zaručené, že "vyskočí" hláška s textom "x"? Funkcia alert nebola predefinovaná a html kód je bezchybný. Môže "vyskočiť" hláška s iným textom? Nejaký html kód <script type="text/javascript" language="javascript"> var x = "x"; alert(x); </script> Nejaký html kód |
||
_es Profil |
#7 · Zasláno: 15. 9. 2009, 19:34:07 · Upravil/a: _es
Tak teda k predchádzajúcemu príspevku:
Vo Firefoxe, Opere a Chrome môže definíciu var x; "prebiť" skôr definovaná globálna vlastnosť týmto spôsobom: <script> __defineGetter__("x", function(){ return "skorsie x";}); __defineSetter__("x", function(){}); </script> <script> // delete x; var x = "x"; alert(x); </script> Po odkomentovaní riadku s príkazom delete už je x rovné "x". Odkazy: bez delete, s delete Vo Firefoxe a Chrome môže ešte neplechu spraviť skoršia definícia konštanty x príkazom const x = "skorsie x"; ktorá nejde zmazať, zmeniť ani predefinovať. A (ne)funguje to potom bez akejkoľvek chybovej správy, pokiaľ to bude bez príkazu var (odkaz). |
||
Časová prodleva: 15 let
|
0