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...
triedy a dedicnost su rakovina it
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.
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
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
Možná je to namespace.
Citace od: slon kdy 31. 01. 2015, 00:50:00
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í.
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().
Bylo to opravdu takhle? Nebylo to spíš
some_method
({
another_method: function() { }
})
Tedy volání funkce s objektem jako parametrem? Tedy zkratka tohohle?
var obj = {
another_method: function() { }
};
some_method(obj);