Objekty sú základným kameňom javascriptu. Vstavané dátové typy sú reprezentované ako objekty. Ak chcete byť úspešným vývojárom javascriptu, musíte mať jasnú predstavu o tom, ako fungujú. Stavebné bloky objektu sa nazývajú jeho polia vlastnosti objektu javascript. Používajú sa na popísanie akéhokoľvek aspektu objektu. Vlastnosť môže popísať dĺžku zoznamu, farbu oblohy alebo dátum narodenia osoby. Vytváranie objektov je jednoduchý proces. Jazyk poskytuje syntax, ktorý je známy ako doslovný objekt, ktorý je reprezentovaný naklonenými zátvorkami.
Prístup k vlastnostiam
Alternatívna syntax pre prístup je známy ako zátvorná položka. V zápise pre názov objektu nasleduje sada hranatých zátvoriek. Uviedli názov vlastnosti ako reťazec: Object ["foo"] = objekt ["foo"] + 1. Teraz je výraznejší, než je bodová notácie, pretože umožňuje variabilné zadať všetky alebo časť vlastností. Je to možné, pretože tlmočník objektu javascript automaticky prevádza výraz do reťazca a potom prijme príslušnú vlastnosť. Názvy vlastností sú vytvorené "za behu" zlučovaním obsahu premennej f s reťazcom "oo": var f = "f"; objekt [f + "oo"] = "bar". Označenie zátvoriek umožňujeNázvy mien vlastností obsahujú znaky zakázané bodovou notáciou. Napríklad nasledujúci operátor je v zátvorkách úplne legálny. Avšak, ak sa užívateľ pokúsi vytvoriť rovnaký názov vlastnosti dot notácie, bude čeliť syntaktická chyba:
objekt; = true ["@ # $% & Amp * ()!".]. Prístup k vlastnostiam vnorených objektov javascriptu je možné získať prepojením bodov a /alebo zátvoriek. Napríklad, ďalší objekt obsahuje vnorený objekt s názvom Baz, obsahujúci ďalší objekt s názvom foo, ktorý má vlastnosť pomenovanú bar, ktorá obsahuje päť: objekt var = {Baz: {foo: {bar: 5}}}. Nasledujúce výrazy získajú prístup ku vlastnosti vnorenej pruhy. Prvý výraz používa bodovú notáciu, zatiaľ čo druhý výraz používa štvorcovú notáciu. Tretí výraz spája oba záznamy tak, aby sa dosiahol rovnaký výsledok:
Funkcia ako metóda
Zapuzdrenie programov
Mnohé jazyky poskytujú príležitosť rozlíšiť medzi verejnými a súkromnými nehnuteľnosťami a neumožňujú prístup k súkromným osobám. javascript, znova zaujal minimalistický prístup, ešte sa nedosiahol. V súčasnosti prebiehajú práce na pridaní tohto jazyka. Preto programátori javascript úspešne použijú túto myšlienku. Spravidla je prístupné rozhranie popísané v dokumentácii alebo komentároch. Zvyčajne je na začiatku názvov vlastníctiev umiestnený znak podčiarknutia (_), ktorý označuje, že tieto vlastnosti sú súkromné. Oddelenie rozhrania od implementácie je skvelý nápad. Obvykle sa to nazýva enkapsulácia.
Vlastnosti
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_1.jpeg [/palec]
Zariadenie s zátvorkami {} sa nazýva literál objektu. Do týchto zátvoriek {} môžete okamžite vložiť niektoré vlastnosti. Napríklad dvojice "kľúč: hodnota, atď.» Nech user = {//meno objektu: "John", //klávesou "name" store value "John" Vek: 30 //tlačidlom "vek" store hodnotu 30}. Vlastnosť má kľúč (tiež známy ako "meno" alebo "id") pred dvojbodkou ":" a hodnotou napravo od neho. Užívateľský objekt má dve vlastnosti. Výsledný užívateľský javascript objekt s dvoma podpísanými súbormi označenými ako "name" a "age". Môžete kedykoľvek pridávať, mazať a čítať súbory z nej. Hodnoty vlastností sú k dispozícii pomocou bodového zápisu. Môže to byť akéhokoľvek typu. Môžete pridať logickú hodnotu. Ak chcete odstrániť vlastnosť, použite odstrániť v prípade objektu javascript Chyba. Všetky objekty chýb javascript sú potomkami objektu Chyba alebozdedený objekt:
Výpočtové vlastnosti
Hodnota vlastnosti vychislimoy jednoduchá: [ovocie] znamená, že názov vlastnosti by mali byť z ovocia. Ak návštevník zadá "jablko", taška bude {apple: 5}. Môžete použiť zložitejšie výrazy v hranatých zátvorkách: nechajte ovocie = "jablko"; let bag = {[ovocie + 'Počítače']: 5 //bag.appleComputers = 5};Hranaté zátvorky sú oveľa výkonnejšie ako štítky s bodmi. Umožňujú mená a premenné vlastností. Ale sú tiež ťažšie písať. Pretože väčšinu času, keď sú názvy vlastností známe a jednoduché, sa používa bodka. A ak potrebujete niečo zložitejšie, prepnite do hranatých zátvoriek.
Rezervácia slov
[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_2.jpeg [/thumb]
V zásade je povolené akékoľvek meno , ale je tu špeciálna: "__proto__" dostáva zvláštne odvolanie z historických dôvodov. Napríklad môžete nastaviť jeho hodnotu inú ako objekt: let obj = {}; obj. proto__ = 5; varovanie (obj.__ proto__); //[object Object] nefunguje podľa očakávania. Ako je zrejmé z kódu, účel primitivu 5 sa ignoruje. Toto môže byť zdrojom chýb a dokonca zraniteľnosti, ak má operátor v úmysle uložiť v objekte ľubovoľné páry kľúč-hodnota a umožniť návštevníkovi, aby špecifikoval kľúč. V tomto prípade si návštevník môže zvoliť "proto" ako kľúč a pridať do javascriptového objektu. Existuje spôsob, ako robiť objekty, ktoré sa zaobchádzajú s __proto__, ako bežný majetok. K dispozícii je aj ďalšia karta dátovej štruktúry, ktorá podporuje ľubovoľné klávesy.Integer Vlastnosti
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_3.jpeg [/palec]
Na vyriešenie problému pomocou telefónnej kódy, môžete " klamať "tým, že sa kódy nezakladajú. Pridávanie znaku "+" (znamienko plus) je dostatočné pred každým kódom. Teraz bude fungovať ako stretnutie. Rozdiel primitívnych objektov je, že sú uložené a skopírovaný "vo forme odkazu." Primitívne hodnoty sú priradené a kopírované "ako celočíselná hodnota". Variabilné udržuje "adresa pamäti" skôr ako samotný objekt alebo "odkazy" na neho. Môžete použiť ľubovoľnú premennú na prístup a úpravu jej obsahu.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_4.jpeg [/palec]
Vo vyššie uvedenom príklade ukazuje, že existuje len jeden objekt a admin, aby ste ho zadali. Potom, ak neskôr použije iný kľúč (používateľ), používateľ zistí zmeny. Operátori rovnosti == a striktná rovnosť === pre objekty pracujú rovnakým spôsobom. Obe objekty sú rovnaké, len ak sú to isté objekty. Pre porovnania ako obj1 & gt; obj2 alebo pre porovnanie s primitívnym obj == 5 objektov sú konvertované na primitívne. Po pravde povedané, takéto porovnanie musí byť veľmi vzácne a zvyčajne výsledkom kódovanie chyby.Kontrola predmet JavaScript,
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_5.jpeg [/palec]
Za použitia «v» pre vlastnosti, ktoré zostávajú nedefinovaný , Zvyčajne je striktná kontrola porovnávania "=== undefined" v poriadku. Existuje špeciálny prípad, keď zlyhá a "in" funguje správne. Toto je prípad, keď objekt objektu existuje, ale zostáva nedefinovaný.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_6.jpeg [/palec]
Vo vyššie uvedenom kódu, je technicky vlastnosť obj.test , Preto prevádzkovateľ pracuje správne. Podobné situácie sa vyskytujú veľmi zriedkavo, pretože nedefinované zvyčajne nie sú určené. Zvyčajne sa používajú nulové hodnoty "neznáme" alebo "prázdne". Preto je operátor v skutočnosti hosťom v kóde.cyklus «Forino»
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_7.jpeg [/palec]
Je potrebné poznamenať, že všetci návrhári «pre» dovoľte, aby ste uviedli cyklickú premennú vo vnútri slučky ako kľúč let. Alternatívne môžete namiesto toho použiť iný názov premennej. Napríklad pre (nechajte prop v obj) je tiež široko používaný. Existuje alternatívna "hranatá konzola", ktorá funguje s akýmkoľvek riadkom.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_8.jpeg [/palec]
Tento bod vyžaduje JavaScript kľúč o Objekt bol platný ID premennej, to znamená, že neexistujú medzery ani iné obmedzenia. Je potrebné venovať pozornosť tomu, že riadok v zátvorkách bol správne citovaný. Hranaté zátvorky tiež poskytujú spôsob, ako ich získaťnázov objektu v dôsledku akéhokoľvek výrazu, na rozdiel od doslovného riadku - s premennou: let key = "likes birds"; //rovnaké ako používateľ ["likes birds"] = true; používateľ [key] = true Tu sa môže variabilný kľúč vypočítať počas vykonávania a závisí od vstupu používateľa a potom sa použije na prístup k vlastnosti. To dáva programátorom väčšiu flexibilitu. Skrytá notácia sa nemôže použiť rovnakým spôsobom, pretože sa bude analyzovať objekt javascript. Nižšie je uvedený príklad.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_9.jpeg [/palec]
Zariadenie Const
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_10.jpeg [/palec]
Zdá sa, že predmet príkaz JavaScriptu (*) spôsobí chybu, ale nie je. Je to preto, lebo const zachytáva hodnotu samotného používateľa. A potom používateľ stále drží odkaz na ten istý objekt. Riadok (*) sa nachádza vo vnútri objektu, nezahŕňa ho. Konst urobí chybu, ak sa pokúsite nainštalovať používateľa a niečo iné. Klonovanie a zlúčenie, Object.assign vytvorí ďalší odkaz na ten istý objekt, ak ho chcete duplikovať. To je tiež uskutočniteľné, ale o niečo komplikovanejšie, pretože javascript nemá vloženú metódu. V skutočnosti je to zriedkavé. Kopírovať podľa odkazu sa používa vo väčšine prípadov. Ale ak ho naozaj potrebujete, potom musíte vytvoriť JavaScriptu objektu a kopírovať existujúce štruktúry, kopírovanie vlastností na primitívne úrovni. Nižšie je uvedený príklad.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_11.jpeg [/palec]
A tiež môžete použiť túto metódu Object.assign , Argumenty dest a src1, srcN sú objekty.Skopíruje vlastnosti všetkých objektov src1, srcNINTO dest. Inými slovami, vlastnosti všetkých argumentov, počnúc druhým, sa skopírujú v 1.. Potom sa vráti k destu. Môžete napríklad použiť na zlúčenie viacerých objektov do jedného.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_12.jpeg [/palec]
, a môže byť tiež použitý pre nahradenie cyklu Object.assign jednoduché klonovanie. Skopíruje všetky vlastnosti používateľa do prázdneho objektu a vracia ho, rovnako ako slučka, ale kratší. Doteraz sa predpokladalo, že všetky užívateľské vlastnosti sú primitívne. Vlastnosti však môžu byť odkazy na iné objekty. Ak to chcete vyriešiť, musíte použiť klonovacie slučky, ktoré kontroluje každú hodnotu používateľa [kľúč], a ak je to objekt, zopakuje jeho štruktúru. Toto sa nazýva "hlboké klonovanie". Existuje štandardný algoritmus hlbokého klonovania, ktorý spracováva vyššie uvedený prípad a zložitejšie prípady, nazývané štruktúrovaný klonový algoritmus. Aby sa nebolo opätovné objavovanie kolesa, môžete použiť funkčnú implementáciu z knižnice javascript lodash, metóda sa nazýva _.cloneDeep (obj).Moderné metódy
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_13.jpeg [/palec]
vracia true
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_14.jpeg [/palec]
Podobne možno vytvoriť vlastné metódy. Toto je len funkcia, ktorá je vytvorenávnútri funkcie konštruktora. Môžem sa niekomu mýliť, ale to funguje. Súkromnú funkciu môže vyvolávať iba samotný konštruktér alebo metódy definované v riadku. Môžu byť použité ako verejné metódy v prípade, že návrhár určená verejnosti a dostupné pomocou verejnej metódy objektov JavaScript. funkcia myob () {funkcia cantBeSeen () {alert (secretValue); } Var secretValue = "; this.method1 = funkcia () {secretValue = 'žiadne prekvapenie; cantBeSeen ();}; this.method2 = cantBeSeen;} var oneOb = nový MYOB (); oneOb.method1 (); //výstrahy oneOb.method2, žiadne prekvapenia '(); //. výstrahy, žiadne prekvapenie'