Predmeti so temelj javascripta. Vdelani podatkovni tipi so predstavljeni kot objekti. Da bi bil uspešen razvijalec javascripta, morate imeti jasno predstavo o tem, kako delujejo. Gradbeni bloki objekta se imenujejo njegove lastnosti lastnosti objekta javascript. Uporabljajo se za opis katerega koli vidika predmeta. Lastnost lahko opiše dolžino seznama, barvo neba ali datum rojstva osebe. Ustvarjanje objektov je preprost postopek. Jezik ponuja sintakso, znano kot objektni literal, ki je predstavljena z zavitimi oklepaji.
Dostop do lastnosti
Alternativna skladnja za dostop je znana kot vnos v oklepaju. V zapisu za ime objekta sledi niz oglatih oklepajev. V njih je ime lastnosti podano kot niz: object ["foo"] = object ["foo"] + 1. Je bolj izrazen kot point-notacija, ker omogoča spremenljivki, da poda vse ali del imena lastnosti. To je mogoče zato, ker interpretacijski objekt javascript samodejno pretvori izraz v niz in nato prejme ustrezno lastnost. Imena lastnosti so ustvarjena "na let" z združevanjem vsebine spremenljivke f z nizom "oo": var f = "f"; predmet [f + "oo"] = "vrstica". Omogoča označevanje nosilcevImena lastnosti vsebujejo znake, ki so prepovedani z zapisom točk. Na primer, naslednji operater je v oklepajih popolnoma zakonit. Če pa uporabnik poskuša ustvariti isto ime lastnosti oznake zapisov, bo naletel na sintaktično napako:
predmet ["! @ # $% & Amp; * ()."] = True. Dostop do lastnosti ugnezdenih objektov javascript je mogoče dobiti s povezovanjem točk in /ali oklepajev. Na primer, naslednji objekt vsebuje vdelani objekt z imenom baz, ki vsebuje drug objekt z imenom foo, ki ima lastnost z imenom vrstice petih: var objekt = {baz: {foo: {bar: 5}}}. Naslednji izrazi imajo dostop do gnezdenega premoženja. Prvi izraz uporablja zapis točke, drugi izraz pa kvadratni zapis. Tretji izraz združuje oba vnosa za dosego istega rezultata:
Funkcija kot metoda
Številni jeziki omogočajo razlikovanje med javnimi in zasebnimi lastnostmi in ne dovoljujejo zunanjega dostopa do zasebnih. javascript, zopet vzel minimalističen pristop, še ni bil dosežen. Trenutno poteka delo za dodajanje tega jezika. Zato bodo javascript-programerji uspešno uporabili to idejo. Dostopen vmesnik je praviloma opisan v dokumentaciji ali komentarjih. Prav tako je običajno, da na začetku imen lastnosti označite podčrtaj (_), ki označuje, da so te lastnosti zasebne. Ločitev vmesnika od izvajanja je odlična ideja. Ponavadi se imenuje enkapsulacija.
Lastnosti
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_1.jpeg
z oklepaji {} se imenuje literal objekta. Nekatere lastnosti lahko takoj vnesete v takšne oklepaje {}. Na primer, pari "ključ: vrednost in tako naprej": pustite uporabnika = {//ime objekta: "John", //po ključu "ime" shrani vrednost "John" starost: 30 //po ključu "starost" shrani vrednost 30}. Lastnost ima ključ (imenovan tudi "name" ali "id") pred dvopičjem ":" in vrednost desno od nje. Uporabniški objekt ima dve lastnosti. Nastali objekt JavaScripta uporabnika z dvema podpisanima datotekama z oznako "ime" in "starost". Datoteke lahko kadar koli dodate, izbrišete in preberete. Vrednosti lastnosti so na voljo z oznako točke. Lahko je katere koli vrste. Dodate lahko logično vrednost. Če želite izbrisati lastnost, uporabite delete v primeru napake objekta javascript. Vsi predmeti javascript napak so potomci objekta Error alipodedovani predmet:
Računalniške lastnosti
Vrednost premoženja vichislima je preprosta: [sadje] pomeni, da je treba ime premoženja vzeti iz sadja. Torej, če obiskovalec vstopi v "jabolko", bo vreča {apple: 5}. Lahko uporabite bolj zapletene izraze v oglatih oklepajih: let sadje = 'jabolko'; pusti vrečko = {[sadje + 'računalniki']: 5 //bag.appleComputers = 5};Oglati oklepaji so veliko močnejši od etiket točk. Omogočajo imena in spremenljivke lastnosti. Toda pisanje je tudi težje. Ker večino časa, ko so imena nepremičnin znana in preprosta, uporabimo piko. In če potrebujete nekaj bolj zapletenega, potem preklopite na kvadratne oklepaje.
Rezervacija besed
[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_2.jpeg [/thumb]
Načeloma je vsako ime dovoljeno , vendar obstaja nekaj posebnega: "__proto__" prejme posebno pritožbo zaradi zgodovinskih razlogov. Na primer, lahko nastavite njegovo vrednost, ki je drugačna od predmeta: let obj = {}; obj .__ proto__ = 5; opozorilo (obj .__ proto__); //[predmet Object], ni deloval tako, kot je bilo predvideno Kot je jasno iz kode, je namen primitive 5 prezrt. To je lahko vir napak in celo ranljivosti, če operater namerava v objekt shraniti poljubne pare ključ /vrednost in dovoliti obiskovalcu, da določi ključe. V tem primeru lahko obiskovalec izbere "proto" kot ključ in doda predmet javascript. Obstaja način, kako narediti objekte, ki jih obravnava __proto__ kot redno lastnost. Obstaja tudi druga podatkovna struktura, ki podpira poljubne ključe.Celotne lastnosti
[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_3.jpeg [/thumb]
Če želite odpraviti težavo s pomočjo telefonskih kod, lahko zavajati, tako da kode ne izpolnjujejo pogojev. Dodajanje »+« (znak plus) je dovolj pred vsako kodo. Sedaj bo deloval kot sestanek. Razlika med predmeti od primitivnih je, da so shranjeni in kopirani "s povezavo." Primitivne vrednosti so dodeljene in kopirane "kot celo število". Spremenljivka shranjuje "naslov v pomnilniku", ne pa samega predmeta ali "povezave" z njim. Uporabite lahko katero koli spremenljivko za dostop in spreminjanje njene vsebine.[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_4.jpeg
V zgornjem primeru je prikazano, da obstaja samo ena vnesite predmet in admin. Če bo kasneje uporabil še en ključ (uporabnik), bo uporabnik zaznal spremembe. Operaterji enakosti == in stroga enakost === za objekte delujejo na enak način. Oba objekta sta enaka, samo če sta isti predmet. Za primerjave, kot je obj1 & gt; obj2 ali za primerjavo s primitivnimi obj == 5 predmeti se pretvorijo v primitive. Iskreno, take primerjave so zelo redke in so običajno posledica napak pri kodiranju.Preverjanje objekta javascript
[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_5.jpeg
Uporaba lastnosti »in« za lastnosti, ki ohranjajo nedefinirano . Običajno se opravi stroga "=== undefined" preverjanje primerjave. Obstaja poseben primer, ko ne uspe in "in" deluje pravilno. To je, kadar lastnost objekta obstaja, vendar se ohranja nedefinirana.[pill] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_6.jpeg [/thumb]
V zgornji kodi je lastnost obj.test tehnično. . Zato operater deluje pravilno. Podobne situacije se pojavljajo zelo redko, ker ni definirano. Običajno se uporabljajo ničelne "neznane" ali "prazne" vrednosti. Tako je operater v, dejansko, gost v kodi.Forinov cikel
[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_7.jpeg
Potrebno je paziti, da vsi graditelji «za» vam omogočajo, da v zanki razglasite spremenljivko zanke, kot je tipka let. Namesto tega lahko uporabite drug tip imena spremenljivke. Na primer, za (let prop v obj) se prav tako pogosto uporablja. Obstaja alternativna "kvadratna oklepaja", ki deluje z vsako linijo.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_8.jpeg
Ta točka zahteva, da ključi, ki se zavedajo javascripta Objekt je bil veljaven ID spremenljivke, kar pomeni, da ni presledkov ali drugih omejitev. Paziti je treba, da je bila črta znotraj oklepaja pravilno citirana. Kvadratni oklepaji prav tako zagotavljajo način, da ga dobiteime nepremičnine kot rezultat katerega koli izraza, v nasprotju z dobesedno črto - s spremenljivko: let key = "všeč ptice"; //enako kot uporabnik ["likes birds"] = true; uporabnik [tipka] = res Tu se lahko tipka spremenljivke izračuna med izvajanjem in je odvisna od uporabniškega vnosa, nato pa se uporabi za dostop do lastnine. To daje programerjem večjo prilagodljivost. Pikasta notacija se ne more uporabljati na enak način, saj bo razčlenjen objekt javascript. Spodaj je primer.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_9.jpeg
Const objekt
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_10.jpeg
Lahko se zdi, da je javascript objekt na liniji (*) bo povzročil napako, vendar ni. To je zato, ker const zajame vrednost samega uporabnika. Potem uporabnik ves čas vodi povezavo do istega objekta. Vrstica (*) gre znotraj predmeta, ne zaseda uporabnika. Const bo naredil napako, če boste poskusili namestiti uporabnika in nekaj drugega. Kloniranje in združevanje, Object.assign ustvari drugo povezavo do istega objekta, če ga želite podvojiti. To je tudi izvedljivo, vendar nekoliko bolj zapleteno, ker javascript nima vgrajene metode. Pravzaprav je to redko. Kopiranje po povezavi se uporablja v večini primerov. Če pa res potrebujete, morate ustvariti objekt javascript in kopirati strukturo obstoječega s kopiranjem njegovih lastnosti na primitivni ravni. Spodaj je primer.[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_11.jpeg
In za to lahko uporabite tudi metodo Object.assign. . Argumenti dest in src1, srcN so objekti.Kopira lastnosti vseh objektov src1, srcNINTO dest. Z drugimi besedami, lastnosti vseh argumentov, začenši z drugim, se kopirajo v prvem. Potem se vrne v dest. Z njim lahko na primer združite več predmetov v enega.[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_12.jpeg
In lahko uporabite tudi Object.assign za zamenjavo zanke preprosto kloniranje. Kopira vse lastnosti uporabnika v prazen objekt in ga vrne, tako kot zanko, vendar krajši. Do sedaj je bilo predpostavljeno, da so vse uporabniške lastnosti primitivne. Ampak lastnosti so lahko povezave do drugih objektov. Če želite to popraviti, morate uporabiti klonsko zanko, ki preveri vsako vrednost uporabnika [ključ] in, če je predmet, ponovi njegovo strukturo. To imenujemo "globoko kloniranje". Obstaja standardni algoritem za globoko kloniranje, ki obravnava zgornji primer in bolj zapletene primere, imenovane algoritem strukturiranega kloniranja. Da ne bi izumili kolesa, lahko uporabite delovno izvedbo iz knjižnice javascript lodash, metoda se imenuje _.cloneDeep (obj).Napredne tehnike
[palec] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_13.jpeg [/palec]
vrne true
[thumb] http://hi-news.pp.ua/uploads/posts/2018-09/obyekti-javascript-prikladi_14.jpeg
Podobno lahko ustvarite zasebne metode. To je samo funkcija, ki je ustvarjenaznotraj konstruktorske funkcije. Morda se zdi, da nekoga zmede, toda tako deluje. Zasebno funkcijo lahko kliče samo konstruktor ali metode, definirane v vrstici. Uporabijo se lahko kot javne metode, če so dodeljene javnemu konstruktorju in dostopne z uporabo odprtih metod predmetov javascript. funkcija myob () {function cantBeSeen () {alert (secretValue); } lahko privateValue = "; this.method1 = function () {secretValue =" ni presenečenj "; cantBeSeen ();}; ta.method2 = cantBeSeen;} lahko oneOb = new myob (); oneOb.method1 (); //opozorila "brez presenečenj" oneOb.method2 (); //opozorila "brez presenečenj".