Aktywne Wpisy
meltdown +37
Używa ktoś z was jeszcze tzw. dumbphone, czyli klasycznych telefonów z klawiaturą?
#telefony #minimalizm #nostalgia
#telefony #minimalizm #nostalgia
Kamienie +9
Szukam czegoś dobrego do czytania. Czegoś naprawdę dobrego. Od kilku godzin przebijam się jednak przez strony wydawnictw, księgarni internetowych i forów w poszukiwaniu czegoś godnego uwagi i nie mogę znaleźć niczego ciekawego.
Może ktoś z Was do polecenia dobrą powieść, która skradła mu kilka wieczorów i pozostawiła po sobie niedosyt?
Czego szukam?
- czegoś, co nie jest romansem, horrorem, kryminałem ani Orzeszkową
- zależy mi na ciekawej historii z krwistymi, interesującymi bohaterami
Może ktoś z Was do polecenia dobrą powieść, która skradła mu kilka wieczorów i pozostawiła po sobie niedosyt?
Czego szukam?
- czegoś, co nie jest romansem, horrorem, kryminałem ani Orzeszkową
- zależy mi na ciekawej historii z krwistymi, interesującymi bohaterami
Szkoda tylko że w JS - technicznie - nie ma i nigdy nie było czegoś takiego jak klasa czy instancjonowanie xD
oczywistym jest że obiekt w javascript to jest hashmapa której kluczem jest string a wartością jest dowolna wartość javascriptowa. czyli deklarując obiekt pos = { x: 522 , y: 566 }; tworzysz hashmapę z dwoma kluczowartościami x,y. gdy potrzebujesz pobrać wartość "y" to silnik wykonuje wyszukiwane btree po hashmapie i znajduje Twój klucz...
ale implementacyjnie
class
świadczy o tym że to właśnie w taki sposób ludzie programują JS a silnik jak widać jest optymalizowany pod taki kod.@Johnny_: @ves666: W skrócie JavaScript nie jest językiem bazującym na klasach ale językiem bazującym na prototypach.
W JS używając new np.
var foo = new Bar();
nie tworzymy nowej instancji na podstawie schematuTo trochę tak jakbyś powiedział że w JS nie da się pisać kodu funkcyjnego bo nie obsługuje pattern matchingu w sygnaturach funkcji.
To porównanie jest błędne bo JS w tworzeniu "klas" i instancji fundamentalnie różni się od Javy czy PHP co opisałem wyżej.
@larvaexotech: To jest właśnie fundamentalna różnica która ma duże znaczenie.
Przez to że JS działa na bazie tworzenia prototypów (niezależnie od syntaxu czy interpretera) a nie instancjonowaniu obiektów na podstawie definicji klasy, możemy po wyinstancjonowaniu modyfikować "definicję klasy" (bo jest to po prostu obiekt a nie definicja) co nie
no to Ci tłumaczyłem że V8 tworzy obiekty na podstawie definicji klasy stosując memory layout analogiczny do tego co jest np. w Javie (tzn. obiekt jest strukturą bajtów a nie słownikiem klucz:wartość). Natomiast wykonywanie metody obiektu np pos.set(5,5) powoduje wykonanie metody "set" z PROTOTYPU klasy a nie wynikowego obiektu stworzonego w konstruktorze. To znaczy, że instancja każdego obiektu nie posiada własnej kopii
@larvaexotech: No i co z tego że jeden z silników tak robi optymalizację jak w standardzie JavaScript nie ma czegoś takiego jak definicja klasy. "Definicją klasy" w JS jest obiekt - prototyp, w PHP czy Javie definicja klasy to definicja klasy.
No dokładnie
Prototyp jest bardzo zbieżny z klasą tak naprawdę, a sensowna różnica jest taka, że klasa zawiera w sobie również definicje PÓL obiektu, natomiast prototyp tylko definicje jego metod.
Co do pkt drugiego o dostępie do klasy to tak, "klasę" (prototyp) można modyfikować w JS z runtime. W C++ jest to niemożliwe, w Javie i PHP za pomocą
@larvaexotech: Napisałem ten post przez to nietrafione porównanie:
JS jest i od swoich korzeni było językiem zorientowanym obiektowo. Dodanie syntaxu
class
- tak jak