eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.wwwTypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?Re: TypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!.POSTED!not-for-mail
    From: Marek S <p...@s...com>
    Newsgroups: pl.comp.www
    Subject: Re: TypeScript - jak uzyskać zmienne prywatne? Gdzie korzyści z TS?
    Date: Thu, 5 Sep 2019 19:58:32 +0200
    Organization: ICM, Uniwersytet Warszawski
    Lines: 78
    Message-ID: <qkrica$s14$1@news.icm.edu.pl>
    References: <qkp5ov$imf$1@news.icm.edu.pl> <bG%bF.588988$GfB1.22808@fx36.am4>
    NNTP-Posting-Host: 89-77-183-104.dynamic.chello.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=utf-8; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: news.icm.edu.pl 1567706314 28708 89.77.183.104 (5 Sep 2019 17:58:34 GMT)
    X-Complaints-To: u...@n...icm.edu.pl
    NNTP-Posting-Date: Thu, 5 Sep 2019 17:58:34 +0000 (UTC)
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101
    Thunderbird/68.0
    In-Reply-To: <bG%bF.588988$GfB1.22808@fx36.am4>
    Content-Language: pl
    Xref: news-archive.icm.edu.pl pl.comp.www:403638
    [ ukryj nagłówki ]

    W dniu 2019-09-05 o 05:54, Szyk Cech pisze:

    > Na pewno wiesz co robisz?

    Wydaje mi się, że tak. Od lat programuję w natywnym JS.

    > _message raczej powinno być tylko jedno w obu klasach. Dziedziczenie
    > polega na tym, że od przodka wjeżdża wszystko.
    > Inny problem jest taki, że _message jest prywatna.

    No i o tym problemie mowa. W natywnym JS ES6 nie mam problemu z
    tworzeniem zmiennych prywatnych, a i metod też - choć ponoć takowe nie
    istnieją. TS już tego nie potrafi więc w tym zakresie kuleje. Oto przykład:

    Moduł 1:

    let privateMethod = Symbol();
    let privateVar = Symbol();

    class a {
    constructor() {
    this[privateVar]=5;
    }

    this[privateMethod]() {
    console.log(this[privateVar]);
    }

    printA() {
    this[privateMethod]();
    }

    }

    Moduł 2:

    import a from ...

    let privateMethod = Symbol();
    let privateVar = Symbol();

    class b extends a {
    constructor() {
    this[privateVar]=10;
    }

    printB() {
    this.printA();
    console.log(this[privateVar]);
    }

    }

    let obj = new b();
    obj.printB(); // metoda publiczna

    // 5
    // 10

    obj.printA(); //metoda publiczna

    //5

    obj[privateMethod](); //metoda prywatna

    //error

    W powyższym przykładzie privateVar jest prawdziwie prywatne dla obu
    klas. Wywołanie prywatnej metody privateMethod kończy się błędem. Da się
    to zrobić w ES6? Da się! A TypeScript wymięka. A wystarczyłoby aby
    transkodował prywatne zmienne i metody do konstrukcji z wykorzystaniem
    symboli.

    Kod pisałem z palca - więc mogłem jakieś błędy popełnić.

    --
    Pozdrawiam,
    Marek

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: