Autor Zpráva
Suta
Profil
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
_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
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
_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
_es:
Díky moc za objasnění.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0