Podivný konstrukt v javascriptu

PsychoIT

Podivný konstrukt v javascriptu
« kdy: 31. 01. 2015, 00:17:12 »
Tak jsem se trochu začal dívat na ten JavaScript, který jsem doposud považoval za odpadní to jazyk, už kvůli typové konverzi, netypovosti a jiným věcem, který se ujal na úplně jiné účely než na které byl původně určen, ale ono to snad dnes patří k základnímu programátorskému vzdělání.

Narazil jsem na zajímavý konstrukt v jednom example:
({
  another_method: function() { }
})
// neni strednik!
var obj = {
  _prop: null,
  get prop() { return this._prop; },
  set prop(val) { this._prop = val;}
};


Co to proboha je, a proč se něco vůbec v JavaScriptu uzavírá do ({ }), když v referenci grouping operatoru na MDN není o ničem takovém ani zmínka, na co se ten grouping operátor zneužívá?

Prostě sračka ten JavaScript! A ani nemá třídy, interfejsy a dědičnost, lol...


slon

Re:Podivný konstrukt v javascriptu
« Odpověď #1 kdy: 31. 01. 2015, 00:50:00 »
triedy a dedicnost su rakovina it

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Podivný konstrukt v javascriptu
« Odpověď #2 kdy: 31. 01. 2015, 00:59:24 »
Odkud je ten příklad?
Pro uklidnění doporučuji ES6, který už třídy a mnoho jiných vychytávek má.
Jinak "starý" JS dědičnost má, jen ne se třídami, ale prototypovou. To jen tak pro úplnost.

phoenix

Re:Podivný konstrukt v javascriptu
« Odpověď #3 kdy: 31. 01. 2015, 01:02:44 »
Prvni cast vysvetlit neumim. Co se tyka stredniku, tak ty se snazi si intepret doplnovat automaticky a to dosti nestastne. Doporucuji explicitne uvadet a dusledne pouzivat slozene zavorky pro ohraniceni bloku, ikdyz zrovna nejsou potreba.

Druha konstrukce vytvori objekt jenz ma atribut prop, pro ktery definuje getter (jak ziskat hodnotu) a setter (funkce rikajici jak nastavit hodnotu). Hodnota tohoto atributu je ulozena interne v _prop jenz je pri vytvoreni inicializovan hodnotou null. Tedy pri naslednem pouziti
Kód: [Vybrat]
var x = obj.prop; // x bude null
obj.prop = 42; // Answer to The Ultimate Question of Life, the Universe, and Everything
var y = obj.prop; // y bude 42

Kolemjdoucí

Re:Podivný konstrukt v javascriptu
« Odpověď #4 kdy: 31. 01. 2015, 01:05:32 »
Možná je to namespace.

triedy a dedicnost su rakovina it

Třídy a dědičnost se rozšířily v IT mezi lety 1980-1990 a přinesly do IT nebývalý pořádek. Výroky o rakovině mohou pronést pouze později narození jedinci kteří nezažili bordel který panoval předtím a kam samozřejmě JS nevyhnutelně spěje, pokud už tam není.


haha

Re:Podivný konstrukt v javascriptu
« Odpověď #5 kdy: 31. 01. 2015, 01:35:28 »
Je super, jak se tady všichni pořád jenom domnívají :-D

V JS se jmenné prostory používají naprosto běžně, typicky v podobě hashe v uzávěru. Dědičnost jak už bylo zmíněno je prototypová - doporučuji řádně nastudovat, vyhnete se spoustě konstatování "proč se to kurva chová zrovna takhle, to je ale sračka ten JS". V CS nebo ES6 "třídy" jsou "by design" a mimochodem dá se poměrně jednoduše implementovat třeba i vícenásobná dědičnost.

Při překladu se aplikuje ASI(automatic semicolon insertion), tím se ale nenechte vyvést z míry a středníky pište všude. Například v minifikovaných skriptech to může úplně změnit význam kódu.

První konstrukt je nesmyslný(aspoň v uvedené podobě). Druhý už byl popsán, je to dalo by se říct zkratka pro Object.defineProperty().



Re:Podivný konstrukt v javascriptu
« Odpověď #6 kdy: 31. 01. 2015, 07:58:52 »
Bylo to opravdu takhle? Nebylo to spíš

Kód: [Vybrat]
some_method
({
  another_method: function() { }
})

Tedy volání funkce s objektem jako parametrem? Tedy zkratka tohohle?

Kód: [Vybrat]
var obj = {
  another_method: function() { }
};

some_method(obj);