Ad 4. V JS bohužel není vše objektem, JS má primitiva a funkce, pokud si pamatuju, měly taky nějaké specifické vlastnosti.
Oldschool ma pravdu. Ono v JS interne fakt je vsetko objektom, aj primitivne typy. Funkcia je instancia Function, cislo instanciou Number, bool instanciou Boolean atd
V tom je to kuzlo. Objekt moze mat nejaky typ, ale je stale objekt a to, ze typeof ti vrati nejaky "primitivny typ" je len koderska pomocka. Tu napriklad vytvorim funkciu vytvorenim instancie triedy Function :-)
var a = new Function(['name', 'surname'], "console.log('whole name:' + name + ' ' + surname)");
a('Kaja','Gott');
whole name:Kaja Gott
No a co sa tyka toho zapuzdrenia a schovavania, ktore zaujima fakt len Javistov ale normalny JSkar sa tomu vyhne tak je mozne pouzit revealing pattern:
function Person() {
this._name = 'foo';
function _setName(name) {this._name = name;}
return {
setName: _setName.bind(this),
getName: this._getName.bind(this)
}
}
Person.prototype._getName = function() {return this._name;}
var kaja = new Person();
Ako vidno je mozne pouzit bud prototypovanu alebo inner funkciu. Vonkajsiemu svetu su ponuknute len "public" metody
vratene v return. Nevyhoda a "prasackost" toho tu je, ze v debugeri neuvidis, ze kaja je z triedy Person. Co pri vacsich projektoch je na slucku. Zato je lepsie nezneuzivat syntax a nehrat sa na zapuzdrenia, private, public atd.
Jo a vzneseni js koderi rulez