Rewolucja klasowa
Swego czasu powszechną wiedzą było to, że klasy stanowiły wyłącznie cukier składniowy dla prototypów. Tak też sprawę ująłem w swojej książce (JavaScript. Programowanie zaawansowane, s. 113). Wtedy (5 lat temu!), faktycznie, takie stwierdzenie dało się obronić. Z jednej strony dlatego, że klasy nie były tak rozbudowane jak obecnie, z drugiej dlatego, że były nowością i paradoksalnie łatwiej było je zrozumieć poprzez porównanie do już istniejącego mechanizmu. Ale od tego czasu sporo się zmieniło.
Widać wyraźnie, że TC39 próbuje ukryć niewygodny fakt istnienia gdzieś tam, na samym dnie prototypów w JS-ie i niemal wszystkie nowości związane z obiektówką dodaje bezpośrednio do klas. Ostatnio weszła naprawdę spora zmiana, składająca się z kilku propozycji połączonych razem: możliwość definiowania pól (własności) w klasach (także statycznych). Równolegle wprowadzono podział na publiczne i prywatne pola. Tym sposobem nic nie stoi na przeszkodzie, by tworzyć takie kombinacje:
class MyClass {
static #x = 'whatever'; // 1
getX() {
return MyClass.#x;
}
}
const myClass = new MyClass();
console.log( myClass.getX() );
Wykorzystuję w tej prostej klasie wszystkie 3 propozycje naraz (1): prywatne, statyczne pole klasy. Czyż to nie piękne?
Równocześnie prywatne własności nie trafiły ani do starej składni konstruktorów, ani do obiektów:
function MyClass() {
MyClass.#x = 'whatever'; // SyntaxError
}
const obj = {
#x: 'whatever' // SyntaxError
};
Klasy stają się de facto nieustannie rozwijaną abstrakcją, nadbudowaną nad prototypami, i dostarczającą rzeczy niemożliwych do osiągnięcia w JS w inny sposób. Jeśli doda się do tego możliwość rozszerzania wbudowanych klas, takich jak Array
, to można z czystym sumieniem stwierdzić, że klasy nie są już dłużej cukrem składniowym. Co więcej, są na tyle wystarczającą abstrakcją, że w wielu przypadkach znika potrzeba myślenia, co znajduje się pod nimi. Klasy faktycznie są w stanie zastąpić prototypy, które zostały zepchnięte do roli niskopoziomowego szczegółu implementacyjnego.
JS to jeden z nielicznych przykładów udanej rewolucji klasowej.
Komentarze
Przejdź do komentarzy bezpośrednio na Githubie.
Dawne komentarze
Ten blog wcześniej korzystał z systemu komentarzy Disqus. Jednakże pożegnaliśmy się i postanowiłem, że zaimportuję do nowej wersji stare komentarze z niego. Cóż, jego system eksportu na wiele nie pozwala…
Piękne podsumowanie w ostatnim zdaniu :D.