Autor Zpráva
ServIT
Profil
Dobrý den,
nejsem v JS lumen, ale napadlo mě vytvořit pro jednu proměnnou getter, který by počítal proměnnou .. ale jen jednou. Pokud by již byla proměnná definována, tak prostě vrátí proměnnou .

příklad :

projFunc={

    get currPage(){
        return    window.location.pathname;
        },


    get uVar(){
        thisVar=null;
        if ( isnull( thisVar) ) {
            ... počítání ... 
        } else {
            return thisVar;
        }
            
    },
Je to takto správně ? podle mě se thisVar pokaždé vynuluje, což není to pravé ořechové ... Jak udělat statickou proměnnou ? Možná v třídě to jde přes static, ale tohle je jen objekt ...
Firibix
Profil
Reakce na ServIT:
Je to takto správně ? podle mě se thisVar pokaždé vynuluje
Je to dokonce ještě horší, před thisVar není klíčové slovo let, tedy se zakládá jako globální proměnná. A samozřejmě se pokaždé přepisuje na null, čímž smaže zapamatovaný výsledek výpočtu.

Jak udělat statickou proměnnou ?
Statická třídní proměnná by byla chybná volba, měla by stejnou hodnotu napříč různými instancemi třídy. Například pokud by třída Zboží měla instanci boty a televize a ve statické proměnné cena uloženou složitě spočítanou cenu, stály by boty i televize stejně.

Normálně založ členskou proměnnou objektu, ve které se bude výsledek výpočtu uchovávat, a v getteru zkontroluj, zda už je zapamatovaný:

const obj = {
    _field: null,
    
    get property() {
        if (this._field !== null) return this._field;
        
        this._field = Math.random();
        
        return this._field;
    }
};

document.write(obj.property); // spusti Math.random()
document.write('<br>');
document.write(obj.property); // vrati zapamatovanou hodnotu
document.write('<br>');
document.write(obj.property); // vrati zapamatovanou hodnotu

Živá ukázka.
ServIT
Profil
Firibix: Děkuji za reakci ... udělal jsem to tak, a funguje to, děkuji
,

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