Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: PsychoIT 31. 01. 2015, 00:17:12

Název: Podivný konstrukt v javascriptu
Přispěvatel: PsychoIT 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...
Název: Re:Podivný konstrukt v javascriptu
Přispěvatel: slon 31. 01. 2015, 00:50:00
triedy a dedicnost su rakovina it
Název: Re:Podivný konstrukt v javascriptu
Přispěvatel: zboj 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.
Název: Re:Podivný konstrukt v javascriptu
Přispěvatel: phoenix 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
Název: Re:Podivný konstrukt v javascriptu
Přispěvatel: Kolemjdoucí 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í.
Název: Re:Podivný konstrukt v javascriptu
Přispěvatel: haha 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().


Název: Re:Podivný konstrukt v javascriptu
Přispěvatel: Filip Jirsák 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);