🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.php
Article #231929

Re: Nikomu niepotrzebne zmienne prywatne?

#231929
From: Marek S
Date: Sun, 28 Jan 2018 14:07
48 lines
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-mail
References: <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