Děkuji za reklamu, jsem to já :)
ad 1/ ano, specifikace mluví o třídách asi na 5 místech… všude, kde vysvětluje, v čem se JS liší od třídních jazyků.
ad 2/ konsenzus je dohodou/porozuměním mezi lidmi, na faktech ale obvykle nic nemění :). Můžete si tomu říkat třeba druh ovoce ale ovocem se to nestane. JS prostě nemá třídy :)
Fakt, že tomu Vy a další budete říkat třídy vede jenom k tomu, že se programátoři, kteří k JS přijdou z jazyků, které podporují třídy, budou snažit opakovat stejné postupy, na které jsou zvyklí a oni prostě v JS nepůjdou… Když to řeknu jinak, pokud budu přecházet mezi ObjectPascalem, PHPkem a C#, změním spoustu věcí, syntaxi, knihovny, frameworky… ale nezměním paradigma pro vytváření objektů. Pokud se ale dostanu k JS, tak třídní paradigma musím zahodit a musím začít přemýšlet v prototypech.
ad 3/ nemám problém přiznat, že s primitivními typy jsem se sekl. Nicméně i Vy máte Vašem rozsáhlém popisu chybu:
„Převést primitivní hodnotu na její objektovou reprezentaci, lze pomocí přímého volání konstruktoru, ani nemusíme použít new.“
Samozřejmě musíte, zkuste si pro změnu i Vy nějaké příklady
var a = Number(2);
var b = new Number(5);
a.data = 5;
b.data = 5;
alert(a.data + "\n" + b.data + "\n" + (typeof a) + "\n" + (typeof b));
i specifikace jasně píše: „The Number Constructor Called as a Function: When Number is called as a function rather than as a constructor, it performs a type conversion. Number ( [ value ] ):
Returns a Number value (not a Number object) computed by ToNumber(value) if value was supplied, else returns +0.“
4/ nebojte se, já si to pročetl a pročtu si i další díly, některé věci, které jsem ani nekomentoval, protože předpokládám, že budu mít možnost v jiných částech