Article View: pl.comp.lang.php
Article #231929Re: Nikomu niepotrzebne zmienne prywatne?
From: Marek S
Date: Sun, 28 Jan 2018 14:07
Date: Sun, 28 Jan 2018 14:07
48 lines
3250 bytes
3250 bytes
W dniu 27-01-2018 o 22:59, Borys Pogoreło pisze: >> 1. Wprowadzono wreszcie pojęcie klas i dziedziczenia ale... zignorowano >> zmienne prywatne. Nie ma czegoś takiego w samych założeniach. > > Bo te klasy i dziedziczenie to tylko opakowanie do dziedziczenia > prototypowego i kopozycji. Ono jest na tyle nietypowe, że zdecydowano się > na takie uproszczenia. A Ty próbujesz podejść JS od strony klas. W JS istnieje wyrażenie class, które zachowuje się odmiennie niż dotychczasowe symulowanie klas za pomocą funkcji. Potrafi dziedziczyć po innej klasie za pomocą extends w fazie deklaracji (to już wykracza poza model kompozycji), posiada operator "super" umożliwiający tworzenie odwołań do metod klasy, w przeciwieństwie to funkcji nie obowiązuje hoisting, kod klasy zawsze uruchamiany jest w trybie ścisłym, metody klasy nie podlegają wyliczeniu, metody klasy nie mają - w odróżnieniu od funkcji ich udających - konstruktorów, nie da się wywołać konstruktora klasy inaczej niż poprzez new. Wszystko wskazuje na to, że klasa w JS zbliża się powoli do ich odpowiedników znanych w innych językach. Tak, wiem, dziedziczenie jest nadal prototypowe, co implikuje ograniczenia. Przypuszczam, że w ES8,9,100 w końcu keyword "private" również zostanie wykorzystany, choć z protected pewnie problem zawsze będzie. Dlaczego zatem podejście do klas w JS jako do prawdziwych klas jest niewłaściwe? >> Czy też sądzicie, że zmienne prywatne to przeżytek? > > Nie. Ale próbujesz, jak to angole mawiają, porównywać pomarańcze do jabłek. > > Zmienne prywatne możesz zasymulować funkcją zwracającą obiekt. Będzie on > nadal mieć dostęp do kontekstu funkcji. Sęk w tym, że ja nie chcę postępować rodem z ES5 skoro mamy epokę ES6 a niebawem ES7. Romanowi pokazałem kod jakiego używam do symulowania zmiennych prywatnych korzystając z mechanizmów ES6. Nie chcę go dublować w tym wątku - zerknij proszę na moją odpowiedź z 27.01 jemu udzieloną. Niestety... bez enkapsulacji nadal nie da się obejść problemu. Przynajmniej do czasu kiedy moduły nie zaczną w przeglądarkach działać. Natomiast to co się udało wyeliminować, to zwracanie obiektu przez funkcję. -- Pozdrawiam, Marek
Technical Details
Message-ID:
<p4klfl$4gq$1@node1.news.atman.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mailReferences:
<p4dakb$a6j$1@node2.news.atman.pl> <ll7vozvk24nr.sp52w7f4aisx.dlg@40tude.net>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail From: Marek S <precz@spamowi.com> Newsgroups: pl.comp.lang.php Subject: Re: Nikomu niepotrzebne zmienne prywatne? Date: Sun, 28 Jan 2018 15:07:42 +0100 Organization: ATMAN - ATM S.A. Lines: 48 Message-ID: <p4klfl$4gq$1@node1.news.atman.pl> References: <p4dakb$a6j$1@node2.news.atman.pl> <ll7vozvk24nr.sp52w7f4aisx.dlg@40tude.net> NNTP-Posting-Host: 89-69-207-111.dynamic.chello.pl Mime-Version: 1.0 X-Trace: node1.news.atman.pl 1517148469 4634 89.69.207.111 (28 Jan 2018 14:07:49 GMT) X-Complaints-To: usenet@atman.pl NNTP-Posting-Date: Sun, 28 Jan 2018 14:07:49 +0000 (UTC) User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 In-Reply-To: <ll7vozvk24nr.sp52w7f4aisx.dlg@40tude.net> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit