Article View: pl.comp.lang.php
Article #231930Re: Nikomu niepotrzebne zmienne prywatne?
From: Wojciech Bancer
Date: Sun, 28 Jan 2018 15:14
Date: Sun, 28 Jan 2018 15:14
61 lines
3209 bytes
3209 bytes
On 2018-01-28, Marek S <precz@spamowi.com> wrote:
> 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.
Nie zachowuje się. To tylko tzw. syntax sugar.
Wszystkie te rzeczy można osiągnąć w ES5, zresztą bez tego nie działałyby
transpilery w rodzaju TypeScript, czy Babela.
> 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.
To co robi "extends", to mniej więcej to co poniżej, tylko w przyjemniejszej
składni.
----
// Shape - superclass
function Shape() {
this.x = 0;
this.y = 0;
}
// superclass method
Shape.prototype.move = function(x, y) {
this.x += x;
this.y += y;
console.info('Shape moved.');
};
// Rectangle - subclass
function Rectangle() {
Shape.call(this); // call super constructor.
}
// subclass extends superclass
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;
var rect = new Rectangle();
console.log('Is rect an instance of Rectangle?', rect instanceof Rectangle); // true
console.log('Is rect an instance of Shape?', rect instanceof Shape); // true
rect.move(1, 1); // Outputs, 'Shape moved.'
----
--
Wojciech Bańcer
wojciech.bancer@gmail.com
Technical Details
Message-ID:
<slrnp6rq5p.14c5.wojciech.bancer@pl-test.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer02.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailReferences:
<p4dakb$a6j$1@node2.news.atman.pl> <ll7vozvk24nr.sp52w7f4aisx.dlg@40tude.net> <p4klfl$4gq$1@node1.news.atman.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer02.am4!peer.am4.highwinds-media.com!peer02.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail Newsgroups: pl.comp.lang.php From: Wojciech Bancer <wojciech.bancer@gmail.com> Subject: Re: Nikomu niepotrzebne zmienne prywatne? References: <p4dakb$a6j$1@node2.news.atman.pl> <ll7vozvk24nr.sp52w7f4aisx.dlg@40tude.net> <p4klfl$4gq$1@node1.news.atman.pl> Organization: None Date: Sun, 28 Jan 2018 16:14:00 +0100 User-Agent: slrn/1.0.3 (Darwin) Mime-Version: 1.0 Message-ID: <slrnp6rq5p.14c5.wojciech.bancer@pl-test.org> Lines: 61 NNTP-Posting-Host: 37.47.128.20 X-Trace: 1517152441 unt-rea-a-01.news.neostrada.pl 670 37.47.128.20:20870 X-Complaints-To: abuse@news.neostrada.pl X-Received-Body-CRC: 2096871833 X-Received-Bytes: 3047 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit