Warning: Redis::get(): php_network_getaddresses: getaddrinfo for localhost failed: No address associated with hostname in /home/klient.dhosting.pl/michalko/webroad.pl/public_html/wp-content/plugins/litespeed-cache/src/object-cache.cls.php on line 665

Warning: Cannot modify header information - headers already sent by (output started at /home/klient.dhosting.pl/michalko/webroad.pl/public_html/wp-content/plugins/litespeed-cache/src/object-cache.cls.php:665) in /home/klient.dhosting.pl/michalko/webroad.pl/public_html/wp-content/plugins/dw-question-answer/inc/Posts/Base.php on line 20

Warning: Cannot modify header information - headers already sent by (output started at /home/klient.dhosting.pl/michalko/webroad.pl/public_html/wp-content/plugins/litespeed-cache/src/object-cache.cls.php:665) in /home/klient.dhosting.pl/michalko/webroad.pl/public_html/wp-includes/feed-rss2-comments.php on line 8
Komentarze do: Przegląd ECMAScript 6 https://webroad.pl/javascript/3964-przeglad-ecmascript-6 blog dla webmasterów, na którym piszemy o HTML5, CSS3, JavaScript, webdesign, UX, CMS Sat, 26 Sep 2020 19:03:26 +0000 hourly 1 https://wordpress.org/?v=6.9.5 Autor: Adrian https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-12174 Mon, 15 Jan 2018 22:27:04 +0000 https://webroad.pl/?p=3964#comment-12174 Chłopak tak się postarał, zarąbisty artykuł, a ty tylko się czepiłeś jakiegoś piep$#%ego 'chodź’ :)

]]>
Autor: Dawid Mazur https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2357 Thu, 22 Oct 2015 07:19:00 +0000 https://webroad.pl/?p=3964#comment-2357 Dzięki za ten post. Piszę teraz pierwszy projekt z użyciem ES6 i korzystam z twojego artykułu jako takiej „bazy wypadowej” póki nie przyswoję sobie wszystkich nowości i ich używanie nie będzie dla mnie naturalne. Dobra robota!

]]>
Autor: Piotr Filipek https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2337 Fri, 28 Aug 2015 18:25:00 +0000 https://webroad.pl/?p=3964#comment-2337 Dzięki za dużą porcję nowości z ES6. Patrząc czasami na składnię w powyższych przykładach zadawałem sobie pytanie, czy to nadal JS :)

]]>
Autor: robert https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2332 Fri, 21 Aug 2015 19:54:00 +0000 https://webroad.pl/?p=3964#comment-2332 fajny artykuł.
mały błąd jaki znalazłem:
zamiast „destructing” powinno być „destructuring”

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2229 Thu, 26 Feb 2015 19:51:00 +0000 https://webroad.pl/?p=3964#comment-2229 Wybacz. Edytowałem gdy Ty pisałeś odpowiedź.

]]>
Autor: winek https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2228 Thu, 26 Feb 2015 19:23:00 +0000 https://webroad.pl/?p=3964#comment-2228 Byłoby miło gdybyś nie uzupełniał argumentacji po odpowiedzi innego członka dyskusji.

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2227 Thu, 26 Feb 2015 19:18:00 +0000 https://webroad.pl/?p=3964#comment-2227 Tak samo kula nie jest kołem ale zaoszczędzimy sobie sporo pisania i powtarzania kodu tworząc kulę dziedziczącą po kole. Raczej nie warto tego roztrząsać.

]]>
Autor: winek https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2226 Thu, 26 Feb 2015 19:16:00 +0000 https://webroad.pl/?p=3964#comment-2226 http://zasoby.open.agh.edu.pl/~10sdczerner/page/zwiazki_pomiedzy_klasami – nie, koło nie jest punktem. Koło jest zbiorem punktów, a więc powiązanie, nie specjalizacja. To tak jakbyś stwierdził, że romb jest trójkątem, bo posiada wysokość.

Druga część była raczej skierowana w stronę socjalistów twierdzących, że skoro syntactic sugar przyczynia się do nieznajomości języka, to powinno go w tym języku nie być.

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2225 Thu, 26 Feb 2015 19:04:00 +0000 https://webroad.pl/?p=3964#comment-2225 W kontekście płaszczyzny kartezjańskiej środek koła jest kluczowy. Tak to wygląda w szerszym kontekście: https://github.com/MichalZalecki/es6features-runtime/blob/master/src/es6/classes.js „Nie widzę powodów do narzekania.”

> „Klasy” w ES6 to cukier składniowy na prototypy
To właśnie napisałem, więc o co chodzi? Nawet jest w opisie testu! Chyba zdajesz sobie sprawę, że znajomość działania dziedziczenia poprzez prototypy nie równa się preferowaniu go nad dziedziczenie za pomocą klas.

]]>
Autor: winek https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2224 Thu, 26 Feb 2015 15:34:00 +0000 https://webroad.pl/?p=3964#comment-2224 Circle extends Point to nie jest dobry przykład dziedziczenia. Koło nie jest punktem – koło jest zbiorem punktów opisanym przez współrzędne środka i promień. Zatem środek powinien być – podobnie jak promień – właściwością obiektu Circle.

„Klasy” w ES6 to cukier składniowy na prototypy, który pozwala tworzyć krótszy i bardziej czytelny kod – nic więcej. Jeśli programista nie zna narzędzia, którego używa, to jego problem. Nie widzę powodów do narzekania.

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2223 Thu, 26 Feb 2015 14:36:00 +0000 https://webroad.pl/?p=3964#comment-2223 https://twitter.com/konklone/status/475819362172280833 :D

]]>
Autor: Comandeer https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2222 Thu, 26 Feb 2015 13:11:00 +0000 https://webroad.pl/?p=3964#comment-2222 No popatrz – to jak z JS i DOM ;)
+ taka mała ciekawostka: http://ideone.com/wQA9A2

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2221 Thu, 26 Feb 2015 12:29:00 +0000 https://webroad.pl/?p=3964#comment-2221 PHP wbrew pozorom nie jest złe. Gorzej sprawa wygląd już ze spójnością API :D

]]>
Autor: Comandeer https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2220 Thu, 26 Feb 2015 12:01:00 +0000 https://webroad.pl/?p=3964#comment-2220 >Chodzi o to, że jest to dziwne zachowanie – sytuacja nazbyt częsta w JS.
Pogadajmy o PHP ;) każdy język jest dziwny. Po prostu na inny sposób.

>Myślę, że nie jest tak źle.
Masz szczęście w takim razie ;) ja widziałem już wystarczająco dużo.

>Pierwszy parametr i tak nie jest ownProperty, pisałem „enumerowalne i własne”
Ok, ale dziedziczy się prototypy. ownProperty to już broszka konstruktora, nie dziedziczenia.
Ale fakt – warto znać różne.

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2219 Thu, 26 Feb 2015 11:45:00 +0000 https://webroad.pl/?p=3964#comment-2219 > Akurat od tego jest funkcja isNaN, więc taka wiedza nie jest potrzebna. Poza tym raczej nie korzysta się z koercji typów w JS.
Jasne, podobnie sprawa wygląda z Array.isArray. Chodzi o to, że jest to dziwne zachowanie – sytuacja nazbyt częsta w JS. Takich przykładów można mnożyć.

> No bo niestety nikt nie kapuje prototypów.
Douglas Crockford dobrze to tłumaczy – dużo osób go słucha i czyta. Myślę, że nie jest tak źle.

> Object.create (nie pierwszy parametr).
Object.create jest wygodny dla pewnych przypadków, a nie zawsze.

var obj = Object.create({foo: 1}, {bar: {value: 2}, baz: {value: 3, enumerable: true}});
var obj2 = new (function () { this.foo = 1; this.bar = 2, this.baz = 3 });
Object.keys(obj) // [„baz”]
Object.keys(obj.__proto__) // [„foo”]
Object.keys(obj2) // [„foo”, „bar”, „baz”] – pożądany wynik

Pierwszy parametr i tak nie jest ownProperty, pisałem „enumerowalne i własne”. Żeby z obj2 otrzymać taki sam wynik musiałbym jawnie napisać enumerable: true. Jestem daleki od tego, że jedna metoda jest lepsza od drugiej. Lepiej znać dwie i wybrać odpowiednią w danym momencie.

]]>
Autor: Comandeer https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2218 Thu, 26 Feb 2015 10:50:00 +0000 https://webroad.pl/?p=3964#comment-2218 >Absurdy jak typeof NaN == „number” pomijam.
Akurat od tego jest funkcja isNaN, więc taka wiedza nie jest potrzebna. Poza tym raczej nie korzysta się z koercji typów w JS.

>gdybym był w tym odosobniony to CS nie zagościłby domyślnie w Railsach
No bo niestety nikt nie kapuje prototypów. To tutaj leży problem, nie w ich niedorobioności

>Jak mam obiekt i chce mu nadać 10 właściwości, które będą enumerowalne i własne to nie użyję Object.create, bo przy każdej muszę napisać jeszcze deskryptor
Ale przecież dodatkowe własności można nadać poza Object.create. to Object.defineProperty wymaga oznaczania enumerable w sposób dosłowny, nie Object.create (nie pierwszy parametr).

>Napisz własny i nie przetłumacz :P
Ok ;)

>Widzę, że nawet taki JSowy maniak jak Ty się dał na to złapać. OBIEKT arguments jest „array like”, nie jest tablicą.
Fajnie, ale ja poprawiałem „jako tablica” :D Poprawna forma to „jako tablicę”. No i ja tam wolę używać Array.from z polyfillem ;)

>Chętnie zaakceptuję jakieś pull requesty :D
A zobaczę. Na razie zajmuję się własnym artkiem o ES7 ;)

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2217 Thu, 26 Feb 2015 08:19:00 +0000 https://webroad.pl/?p=3964#comment-2217 Na wiele, rzeczy mogę odpowiedzieć krótko: „PRZEGLĄD ECMAScript 6”, na pisanie dokumentacji miałoby wątpliwy sens – już takie istnieją.

> Czyli mieli w wersji 6 przepisać fundamenty języka tylko dlatego, żeby wprowadzić klasy?
Im dłużej piszę w JS to patrząc na niego przez pryzmat np. Ruby to widzę, że przydałyby się mu solidne usprawnienia. Absurdy jak typeof NaN == „number” pomijam. Żeby to zrozumieć trzeba wiedzieć, że NaN jest liczbą przechowywaną w pamięci jako same jedynki – czy taka wiedza powinna być konieczna do zrozumienia sprawdzania typu? Moim zdaniem nie powinna być. Klasy mogłyby być dodane, (a nie zamiast) mimo, że prototypy mają więcej możliwości to widząc class w CoffeeScript cieszyłem się jak małe dziecko i gdybym był w tym odosobniony to CS nie zagościł by domyślnie w Railsach.

> Akurat to jest najgorszy przykład dziedziczenia w JS.
Jest wiele sposobów, nie ma „jednego poprawnego”. Jak mam obiekt i chce mu nadać 10 właściwości, które będą enumerowalne i własne to nie użyję Object.create, bo przy każdej muszę napisać jeszcze deskryptor.

> W życiu bym tak tego nie przetłumaczył.
Tłumacząc swój artykuł z angielskiego zdecydowałem, że przetłumaczę. Napisz własny i nie przetłumacz :P

> Co do iteratorów i generatorów: warto zwrócić uwagę na to, że generator de facto zwraca iterator.
Myślę, że dość jasno wynika to z pierwszego przykładu.

> >Możemy przyjąć w funkcji wiele parametrów jako tablica i pożegnać obiekt arguments.
> tablicę*
Widzę, że nawet taki JSowy maniak jak Ty się dał na to złapać. OBIEKT arguments jest „array like”, nie jest tablicą. Nie posiada np. metody pop by go nie modyfikować. Żeby uzyskać tablice potrzebujesz tego:
var args = Array.prototype.slice.call(arguments);
https://developer.mozilla.org/pl/docs/Web/JavaScript/Referencje/Funkcje/arguments

> Bardzo mi brakuje opisu Reflect API.
Tak jak pisałem, to jest przegląd. Nowe API obiektu niedługo będzie w repozytorium, na Reflect API też przyjdzie czas.

]]>
Autor: Comandeer https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2216 Wed, 25 Feb 2015 23:02:00 +0000 https://webroad.pl/?p=3964#comment-2216 >Obecnie nie ma dobrych powodów, dla których nie mielibyśmy zacząć używać ES6 już dziś.
Jedyne powody do pisania czegoś w ES6 to Proxy, subklasowanie natywnych obiektów oraz string interpolation. Żadnej z tych rzeczy żaden konwerter do ES5 nie potrafi. Jedyna przeglądarka mająca to wszystko to nowy lisek, Chrome brakuje obsługa Proxy. A wszystko skrzętnie poukrywane za flagami (polecam spojrzeć ile flag potrzebuje io.js). Pisanie klas tylko po to, żeby je przerobić na prototypy IMO mija się z celem. A już całkowicie nie rozumiem tworzenia całych języków (atScript), które są supersetami ES6 i… są kompilowane do ES5, żeby działać. Dla mnie bezsens.

Przy stałych i let pominięto najważniejsze rzeczy, czyli 'temporal dead zone’ oraz brak hoistingu. Dzięki temu mamy de facto całkowicie dwa odmienne obiegi zmiennych, które zachowują się całkowicie inaczej.

>Stałe jak zapewne się domyślasz nie mogą zostać nadpisane, ale mogą być modyfikowane – można edytować właściwości obiektu przypisanego do stałej.
Wypadałoby przy tym zaznaczyć, że po prostu wynika to z tego, że w JS wartości prymitywne są niemutowalne (zatem porównywane przez wartość), a obiekty posiadają tzw. tożsamość. Nie modyfikujemy samej tożsamości obiektu, jedynie modyfikujemy jego własności.

Przy arrow functions wypada zwrócić uwagę, że nie dziedziczą po Function.prototype (a przynajmniej nie w pełni)

>trochę podstępnego parameter = parameter || default
Czemu podstępnego? Jak ktoś nie zna zasad koercji typów w JS, to nie powinien w tym języku pisać ;)

>Czy Ci się to podoba czy nie (jak to jest w moim przyp adku), klasy wprowadzone przez ES6, są tylko składniowym cukrem, którym możemy posypać prototypy.
Czyli mieli w wersji 6 przepisać fundamenty języka tylko dlatego, żeby wprowadzić klasy? IMO wgl ta składnia nie powinna zostać wprowadzona. Większość devów JS nie ogarnia prototypów, a jak się to przysłoni takim lukrem, to znajomość JS spadnie diametralnie. Wystarczy popatrzeć na ludzi, którzy znają jedynie CS…

>Jednak przyznaję, że extends wygląda przyjaźniej niż Child.prototype = new Parent()
Akurat to jest najgorszy przykład dziedziczenia w JS. Od dawna lepiej to machnąć przy pomocy Object.create. Z tym, że obydwa sposoby nam pokażą, że Child i tak nie jest potomkiem Parent.

W sumie jedyna sensowna przewaga extends (oprócz pokazywania poprawnych związków między „klasami”) to możliwość subklasowania natywnych „klas”. I to jest jedyny powód, dla którego sięgnąłbym po klasy.

>Możemy przyjąć w funkcji wiele parametrów jako tablica i pożegnać obiekt arguments.
tablicę*

>Mogą być wykożystane jako identyfikatory właściwości obiektów, w tym w WeakMap.
wykorzystane*

>Może się wydawać (mi tak się wydawało), że symbole są świetnym sposobem na symulowanie prywatnych właściwości (przez unikalne identyfikatory, niedostępne poza funkcją konstruktora). I wiecie co? Nie są.
One mają być po prostu unikalne. IMO Symbol to zbędny bajer i niepotrzebnie wprowadza aż tyle zmian do języka.

Co do iteratorów i generatorów: warto zwrócić uwagę na to, że generator de facto zwraca iterator.

Generatory jednak służą przede wszystkim do zarządzania asynchronicznym kodem i w połączeniu z Promises dają niesamowite możliwości, pozostawiając kod czysty i praktycznie „synchroniczny” (zresztą pisałem o tym na tym portalu z 2 lata temu).

>Jeżeli chcesz wiedzieć więcej o generatorach to sprawdź serię wpisów o generatorach w ES6autorstwa Davida Walsha.
One nie są autorstwa Davida Walsha, tylko Kyle’a Simpsona. Ja od siebie natomiast polecę blog 2ality.com – jego autor jest prawdziwym mistrzem jeśli chodzi o JS.

Co do literałów: śmieszne jest to zwłaszcza wówczas, gdy uświadomimy sobie, że literały takie zdeprecjonowano w ES5…

>Literały Szablonów
W życiu bym tak tego nie przetłumaczył. W ogóle to jest bolączka naszego community, że próbujemy tłumaczyć wszystko, nie podając równocześnie angielskich terminów. Jak ktoś przeczyta ten artykuł i zechce poszukać czegoś więcej na temat tego ficzera z ES6, to w życiu nie znajdzie tego, czego szuka. Template strings – tyle.

>Co więcej literał taki może otrzymać tag, który jest funkcją, a ta może go zmodyfikować.
Bez tego ten dodatek nie miałby najmniejszego sensu. Dzięki temu można było przepisać JSX na JS, pozbywając się całkowicie bzdurnej składni a’la E4X.

Przy Promises brakuje linku do specyfikacji: https://promisesaplus.com/

Co do modułów – TC-39 strzeliło sobie w stopę nie opierając składni modułów na tym zaproponowanym przez CJS. Co więcej – obecna implementacja loaderów IMO robi więcej szkody niż pożytku. Nie wspominając o nowym tagu module. Dlatego przez jeszcze bardzo długi czas standardem pozostanie UMD.

Bardzo mi brakuje opisu Reflection API.

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2215 Wed, 25 Feb 2015 20:49:00 +0000 https://webroad.pl/?p=3964#comment-2215 Robim co możem :)

]]>
Autor: Polska języka trudna języka https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2214 Wed, 25 Feb 2015 20:47:00 +0000 https://webroad.pl/?p=3964#comment-2214 Brawo za czas reakcji :)

]]>
Autor: Michał Załęcki https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2213 Wed, 25 Feb 2015 20:42:00 +0000 https://webroad.pl/?p=3964#comment-2213 Cóż, pisanie w podróży mi nie służy. Dzięki.

]]>
Autor: Polska języka trudna języka https://webroad.pl/javascript/3964-przeglad-ecmascript-6#comment-2212 Wed, 25 Feb 2015 20:39:00 +0000 https://webroad.pl/?p=3964#comment-2212 Choć, a nie chodź… Pozdrowienia dla „korekty”

]]>