Objektno usmerjeni JavaScript (OOJS) 3 načini za ustvarjanje primerov predmetov
Ko je programski jezik vse o predmetih, prva stvar, ki se moramo naučiti je kako ustvariti predmete. Ustvarjanje objektov v JavaScriptu je dokaj enostavno: par kodrastih oklepajev vendar bo to opravilo niti edini način ustvariti predmet niti edini način boste kdaj potrebovali.
V JavaScriptu so primeri objektov ustvarjene iz vgrajenih predmetov in se pojavijo, ko se program izvaja. Na primer, Datum
je vgrajen objekt, ki nam daje informacije o datumih. Če želimo prikazati trenutni datum na strani, bomo potrebujete primer izvajanja Datum
ki vsebuje informacije o trenutnem datumu.
JavaScript nam omogoča tudi določite lastne objekte ki lahko izdelajo svoje primerke predmetov v času izvajanja. V JavaScript, vse je predmet in vsak objekt ima končni prednik imenuje Objekt
. Vzpostavi se izdelava primerka objekta primer.
1. novo
operaterja
Eden od najpogostejših in najbolj znanih metod za ustvarjanje novega primerka objekta je uporabljati novo
operaterja.
Potrebujete a konstruktor narediti novo
delo upravljavca. Konstruktor je metoda predmeta, ki združuje a nov primer tega objekta. Njegova osnovna skladnja izgleda takole:
nov konstruktor ()
Konstruktor lahko sprejemajo argumente ki se lahko uporablja za spreminjanje ali dodajanje lastnosti primerku objekta, ki ga konstruira. Konstruktor ima isto ime kot predmet, ki mu pripada.
Tukaj je primer, kako ustvariti na primer Datum ()
predmet z novo
ključna beseda:
dt = new Datum (2017, 0, 1) console.log (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100
Datum ()
je konstruktor za ustvarjanje novega Datum
predmet. Različni konstruktorji za objekt različne argumente ustvariti enake vrste predmetnih primerov z različne lastnosti.
Vsi vgrajeni predmeti v JavaScriptu se ne morejo prikazati kot primeri Datum
. Obstajajo predmeti, ki ne prihaja z konstruktorjem: Math
, JSON
in Odražaj
, vendar so še vedno običajni predmeti.
Med vgrajenimi objekti, ki imajo konstruktorje, Simbol
v slogu konstruktorja ni mogoče poklicati ustvari novo Simbol
na primer. Lahko je samo kot funkcija ki vrne novo Simbol
vrednost.
Tudi med vgrajenimi objekti, ki imajo konstruktorje, ni treba, da bi vsi imeli svoje konstruktorje, da bi bili klicani s novo
operaterja, da se ga prikaže. Funkcija
, Array
, Napaka
, in RegExp
lahko imenujemo tudi funkcije, brez uporabe novo
ključno besedo, in ustvarili bodo primerek novega objekta.
2. Odražaj
predmet
Podporne programerje morda že poznajo API-ji za razmislek. Razmišljanje je značilnost programskih jezikov pregledati in posodobiti nekatere osnovne subjekte, predmeti in razredi, med izvajanjem.
V JavaScriptu ste lahko že izvedli nekaj operacij za razmislek Objekt
. Ampak, a ustrezen API za refleksijo sčasoma tudi v JavaScriptu.
The Odražaj
Objekt ima nabor metod za ustvarite in posodobite primerke predmetov. The Odražaj
predmet nima graditelja, zato ga ni mogoče ustvariti z novo
operaterja in, podobno Math
in JSON
, to ni mogoče poklicati kot funkcijo prav tako.
Vendar pa, Odražaj
ima enakovredna. \ t novo
operaterja: Reflect.construct ()
metodo.
Reflect.construct (cilj, argumentiList [, newTarget])
Oba cilj
in neobvezno newTarget
argumenti predmeti, ki imajo lastne konstruktorje, medtem argumentiNa seznam
je Seznam argumentov , ki se posreduje konstruktorju cilj
.
var dt = Reflect.construct (datum, [2017, 0, 1]); console.log (dt); // Sun Jan 01 2017 00:00:00 GMT + 0100
Zgornja koda ima enak učinek kot instantiating Datum ()
uporabljati novo
operaterja. Čeprav lahko še vedno uporabljate novo
, Razmišljanje je Standard ECMAScript 6. Prav tako vam omogoča uporabite newTarget
prepir, kar je še ena prednost pred novo
operaterja.
Vrednost newTarget
's prototip (če smo natančni, je prototip. \ t newTarget
Konstruktor uporabnika postane prototip na novo ustvarjenega primera.
Prototip je lastnost predmeta, vrednost, ki je tudi predmet, ki nosi lastnosti prvotnega predmeta. Skratka, objekt dobi svoje člane iz prototipa.
Tukaj si poglejmo primer:
razred konstruktor () this.message = function () console.log ('sporočilo od A') razred B konstruktor () sporočilo () console.log ('sporočilo iz B') data () console.log ('podatki iz B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // sporočilo iz konzole.log (obj.data ()); // podatki iz B console.log (obj instanceof B) // true
Z mimo B
kot tretji argument za Reflect.construct ()
, prototipno vrednost. \ t obj
predmet je biti enaka kot prototip B
konstruktor (ki ima lastnosti. \ t sporočilo
in podatkov
).
Tako, obj
lahko dostopa do sporočilo
in podatkov
, prototipu. Ampak, od takrat obj
uporablja A
, ima tudi svoje sporočilo
to prejeto od A
.
Čeprav obj
je sestavljen kot matrika, je ne primer Array
, ker je njegov prototip nastavljen na Objekt
.
obj = Reflect.construct (matrika, [1,2,3], objekt) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
lahko uporabite, če želite ustvariti objekt več kot en načrt.
3. Object.create ()
metodo
Ustvarite lahko tudi nov navaden predmet s posebnim prototipom preko Object.create ()
. Tudi to se lahko zdi zelo podobno uporabi novo
operater, vendar ni.
Object.create (O [, lastnostiObjekt])
The O
argument je predmet, ki služi prototipu za nov predmet, ki bo ustvarjen. Neobvezno propertiesObject
argument je a Seznam lastnosti morda želite dodati novemu objektu.
razred konstruktor () sporočilo () console.log ('sporočilo od A') var obj = Object.create (novo A (), data: writeable: true, configurable: true, value: function () return 'data from obj') console.log (obj.message ()) // sporočilo iz konzole.log (obj.data ()) // podatki iz obj obj1 = Object.create ( novo A (), foo: writable: true, configurable: true, value: function () return 'foo iz obj1') console.log (obj1.message ()) // sporočilo iz konzole A. log (obj1.foo ()) // foo iz obj1
V obj
predmet, je dodana lastnost podatkov
, ko je v obj1
, to je foo
. Torej, kot vidite, lahko imamo lastnosti in metode dodane novemu objektu.
To je super, ko želite ustvariti več predmetov iste vrste ampak z različne dodatne lastnosti ali metode. The Object.create ()
Sintaksa shrani težave pri kodiranju vseh ločeno.