Autor | Zpráva | ||
---|---|---|---|
Suta Profil |
#1 · Zasláno: 10. 1. 2012, 12:42:22
Potřeboval bych radu, zda-li je potřeba (nutnost) rušit navázané události na lokální (pomocné) proměnné, které jsou v závěru funkce vráceny a exekuovány do vlastnosti objektu.
myObject = { itemHtml: createItemHtml() } function createItemHtml() { var html; html = document.createElement("div"); html.onclick = function() {}; html.onmouseover = function() {}; return html; } Zůstanou v paměti nepotřebné události svázané s dočasnou lokální proměnnou html? |
||
_es Profil |
Suta:
„Zůstanou v paměti nepotřebné události svázané s dočasnou lokální proměnnou html?“ No a ako inak by mali byť funkčné udalosti onclick a onmouseover ?
Lokálna premenná html zanikne, no objekt do nej uložený, aj tie funkcie s ním spojené, samozrejme musia zostať prístupné cez vlastnosť myObject.itemHtml .
Doplnenie: teoreticky ani lokálna premenná html nezanikne, lebo funkcie definované vo funkcii createItemHtml zostávajú existovať. No niektoré prehliadače tú premennú zmažú, ak v tých dvoch funkciách nemôže byť nijako teoreticky použitá.
|
||
Suta Profil |
#3 · Zasláno: 10. 1. 2012, 13:38:31 · Upravil/a: Suta
_es:
Právěže řešení existuje a já přemýšlím, zda-li má smysl. Jinými slovy, vyplatí-li se tam, kde je to možné, vyhnout vázání událostí na lokální proměnné, které jsou v podstatě pouze pomocnými proměnnými vracejícími skutečně používaný objekt. myObject = { itemHtmlArray: {} } function createItemHtml( itemId ) { myObject.itemHtmlArray[itemId] = {}; myObject.itemHtmlArray[itemId].html = document.createElement("div"); myObject.itemHtmlArray[itemId].html.onclick = function() {}; myObject.itemHtmlArray[itemId].html.onmouseover = function() {}; } createItemHtml (1); document.body.appendChild(myObject.itemHtmlArray[1].html; |
||
_es Profil |
#4 · Zasláno: 10. 1. 2012, 13:45:09
Suta:
„Právěže řešení existuje“ Nerozumiem, riešenie čoho? Samotná premenná html má možno 4 alebo 8 bajtov, rovnako ako premenná itemId , ktorá teoreticky môže zostať existovať.
|
||
Suta Profil |
#5 · Zasláno: 10. 1. 2012, 13:50:28 · Upravil/a: Suta
_es:
Aha, takže ono nedojde k vytvoření dvou objektů, jednoho v lokální proměnné a druhého, který je vrácen? Pokud je vytvořen pouze jeden objekt, který je uložen do vlastnosti objektu a jak lokální proměnná, tak vlastnost objektu na něj pouze odkazují, pak by mělo být vše v pořádku. Otázkou by pak pouze bylo, zda-li při zrušení vlastnosti objektu nezůstane objekt v paměti díky propojení odkazu s lokální proměnnou. |
||
_es Profil |
Suta:
„takže ono nedojde k vytvoření dvou objektů“ Nie, pri kopírovaní objektov sa kopíruje len odkaz na objekt a rôzne premenné potom môžu odkazovať na ten istý objekt. „zda-li při zrušení vlastnosti objektu nezůstane objekt v paměti díky propojení odkazu s lokální proměnnou“ Princíp je jednoduchý: ak sa k objektu či premennej z kódu už nijako nedá dostať, tak je určený na zmazanie. Ak na objekt odkazuje len premenná x a prostredníctvom toho objektu zostane existovať nejaká lokálna premenná y , tak pri zmene hodnoty x bude na zmazanie určený aj ten objekt aj y .
|
||
Suta Profil |
#7 · Zasláno: 10. 1. 2012, 14:49:50
_es:
Díky moc za objasnění. |
||
Časová prodleva: 12 let
|
0