🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Nikomu niepotrzebne zmienne prywatne?

#231930
From: Wojciech Bancer
Date: Sun, 28 Jan 2018 15:14
61 lines
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-mail
References: <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