Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
Zdravím, začínám s OOP v JavaScriptu, čtu návody a momentálně se pokouším udělat co nejjednodušší destruktor objektu. Dá se udělat nějaký zautimatizovaný? Tím myslím, jestli jde udělat něco jako
this = null; a tím by zanikly všechny, nazývám-li to správně, metody a atributy objektu. Zatím jsem dokázal akorát jednotlivé metody (?) nastavit na null, ale vše najednou se mi nepodařilo (pokud to vůbec jde?).
Vyřešil jsem to. Možná to jde i lépe (efektivněji, správněji, ...), ale to co chci, to plní. destruct: function(){ for(var id in this){ this[id] = null; } } |
||
Chamurappi Profil |
#2 · Zasláno: 12. 3. 2013, 01:52:04
Reaguji na TomaseJ:
„ale to co chci, to plní“ A co vlastně chceš? Paměť uvolňuje garbage collector, jakmile k datům nevede žádná cesta a až když usoudí, že ji potřebuje. „tím by zanikly všechny, nazývám-li to správně, metody a atributy objektu“ Nemusí zaniknout, ani když je nastavíš na null , pokud existují proměnné, do kterých byly přiřazeny. Metoda je jen obyčejná funkce, je přenosná mezi objekty.
„Zatím jsem dokázal akorát jednotlivé metody (?) nastavit na null“ K čemu pak takový objekt je? Pokud je uložený v nějaké proměnné, bude v ní uložený nefunkční pozůstatek. V jakých návodech k OOP v JS jsi našel, že má smysl psát destruktor? |
||
preca1 Profil |
#3 · Zasláno: 12. 3. 2013, 01:57:38 · Upravil/a: preca1
Zdravim,
jestli funguje this = null si můžeš vyzkoušet.
Tvojí metodou destruct smažeš všechny metody a atributy, ale ten objekt bude pořád existovat. var instance = new MyObject('instance name'); instance.name; // vypíše 'instance name' instance.destruct(); instance.name; // vypíše null, pořád je ale alokovaná paměť pro instanci instance (kdo ví, co to znamená...) instance = null; // teprv teď si garbage collectoru řek, že může ono místo uvolnit. Toto je to, co hledáš Onehdá sem řešil něco podobného a vyřešil sem to továrnou, která vytvářela instance a pak je za mě všechny ve správném momentu mazala. Zajímavé čtení o GC |
||
TomasJ Profil |
No vypsal jsem si data z objektu při načtení stránky. Pak jsem přes JavaScriptový zápisník volal nějaké metody z vytvořené instance objektu a vykřikoval mi chyby, že taková funkce neexistuje. Ale jak oba píšete, objekt zůstane, takže musím vymazat instanci.
preca1: Ano, to je nejspíš to, co potřebuji. Díky. :) Chamurappi: „V jakých návodech k OOP v JS jsi našel, že má smysl psát destruktor?“ Právě že nikde, jen mě to tak napadlo. V PHP jsem zvyklý používat destruktor a teď jsem se začal věnovat JS podrobněji než jen vše mít funkcionální. Takže jsem si navrhl strukturu objektu a řídil jsem se tak nějak podle svého, protože jsem četl několik článků a všude se píše o "správném" navrhování něco jiného. Pak jsem našel na jedné české stránce údajně nejsprávnější řešení, používající MixIns (asi víte o čem to píšu), jen jsem ho dostatečně nepochopil a tak jsem začal přibližně takto: var MujObjekt = function(vstup) { this.vstupOdUzivatele = vstup; } MujObjekt.prototype = { ziskejVstup: function() { return this.vstupOdUzivatele; }, zmenVstup: function(novyVstup) { this.vstupOdUzivatele = novyVstup; } } var Instance = new MujObjekt("prvni nezmeneny vstup"); document.write(Instance.ziskejVstup()); Instance.zmenVstup("zmeneny vstup"); alert(Instance.ziskejVstup()); |
||
Časová prodleva: 11 let
|
0