Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.lang.php > #15691
| From | Marek S <precz@spamowi.com> |
|---|---|
| Newsgroups | pl.comp.lang.php |
| Subject | Re: Nikomu niepotrzebne zmienne prywatne? |
| Date | 2018-01-27 13:24 +0100 |
| Organization | ATMAN - ATM S.A. |
| Message-ID | <p4hr1e$bvl$1@node2.news.atman.pl> (permalink) |
| References | <p4dakb$a6j$1@node2.news.atman.pl> <1fz90to1qzf67.dlg@tyczka.com> <p4do0k$drj$1@node1.news.atman.pl> <1j1wsv7x3pigv.dlg@tyczka.com> |
W dniu 26-01-2018 o 23:22, Roman Tyczka pisze:
>> Czegoś takiego w klasach JS nie ma.
>
> Dopiero raczkuję w JS, ale jeśli rzeczywiście nie ma pól prywatnych
> (property znam z Delphi i z czymś ciutkę innym mi się kojarzą)
W nomenklaturze JS zmienne jako cechy obiektów lub też quasiobiektów to
właściwości:
https://www.w3schools.com/js/js_properties.asp
Jest też gotowa metoda do ich tworzenia zawierająca "properties" w nazwie:
https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
> to w ogóle
> nie ma mowy o pełnej obiektowości, bo wszak obiekt to zbiór pól z danymi i
> metod do operowania na nich, dzięki czemu uzyskuje się jedną z
> fundamentalnych cech OOP czyli enkapsulację. Bez prywatności nie ma
> enkapsulacji, bo pola mogą być zmieniane poza logiką obiektu, a to prowadzi
> do nieprzewidzianych sytuacji.
O tym właśnie piszę. Zarówno standard JS (przynajmniej bieżący ECMA6)
jak i programiści uważają właściwości prywatne chyba jako oldschoolowe.
JS od dawna ogranicza się jedynie do rezerwacji słów kluczowych typu
private czy protected ale nic z tym nie robi. Programiści JS, jak wynika
z moich dyskusji, dziwią się, że coś takiego chcę używać.
Dla Twojej informacji: daje się symulować właściwości prywatne w klasach
ale wymaga to łamańców. W Googlach grzebałem ze 2 dni i nigdzie
przykładu poniższego nie znalazłem. Ja wykorzystuję do tego zmienne o
zasięgu bloku, które deklaruje się słowem kluczowym let (nie var).
Wykorzystuję też to, że klasę można rozszerzać nie tylko inną klasą, ale
również - uwaga - wynikiem działania funkcji!!! Trzecia rzecz, korzystam
z tzw słabych map lub symboli bo w JS właściwość nie musi być aresowana
stringiem, ale również .... obiektem!
Dopiero taki burdel w kodzie utworzy zmienną prywatną:
let aClass = (function () {
let a = Symbol("a");
class aClass {
readFromA() {
console.log(this[a], this.b);
}
constructor() {
this[a] = "aaa"; //this is private
this.b = "bbb"; // this is public
}
}
return aClass;
})();
let bClass = (function () {
let a = Symbol("a");
class bClass extends aClass {
readFromB() {
console.log("B", this[a], this.b);
}
constructor() {
super();
this[a] = "ccc"; //this is private
this.b = "ddd"; // this is public
}
}
return bClass;
})();
let bc = new bClass();
bc.readFromA(); // aaa ddd
bc.readFromB(); // ccc ddd
Wyrażenie "extends aClass" rozszerza klasę bClass o wynik działania
funkcji anonimowej, który jest przechowywany w zmiennej sugerującej, że
to klasa aClass a nie zmienna. Funkcja anonimowa zwraca natomiast
deklarację tak samo nazwanej klasy: czyli aClass.
Super, co?
--
Pozdrawiam,
Marek
Back to pl.comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-25 20:19 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Roman Tyczka <noemail@because.no> - 2018-01-25 21:29 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-26 00:07 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Roman Tyczka <noemail@because.no> - 2018-01-26 23:22 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-27 13:24 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-27 22:59 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-28 15:07 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-28 16:14 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-28 20:35 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-28 22:01 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Marek S <precz@spamowi.com> - 2018-01-29 19:01 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-01-29 20:12 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Borys Pogoreło <borys@pl.edu.leszno> - 2018-01-30 20:36 +0100
Re: Nikomu niepotrzebne zmienne prywatne? Wojciech Bancer <wojciech.bancer@gmail.com> - 2018-02-01 22:15 +0100
csiph-web