Objekt-orienteeritud JavaScript (OOJS) 3 võimalust objektide esinemise loomiseks
Kui programmeerimiskeel on kõik objektidest, esimene asi, mida peame õppima, on kuidas luua objekte. Objektide loomine JavaScriptis on üsna lihtne: paar lokkis traksid teeb seda siiski mitte ainus viis objekti loomiseks ega ainus viis peate kunagi kasutama.
JavaScriptis on objektid loodud sisseehitatud objektidest ja tulevad eksisteerima, kui programm töötab. Näiteks, Kuupäev
on sisseehitatud objekt, mis annab meile teavet kuupäevade kohta. Kui me tahame näha praegust kuupäeva lehel, siis me vajavad käitust Kuupäev
mis kannab teavet praeguse kuupäeva kohta.
JavaScript võimaldab meil ka määratleda meie enda objektid mis suudavad käivitada oma objektide eksemplare. JavaScriptis, kõik on objekt ja igal objektil on ülim esivanem kutsus Objekt
. Objekti eksemplari loomist nimetatakse esitlus.
1. uus
operaator
Üks kõige tavalisemaid ja tuntud meetodeid uue objekti näite loomiseks on kasutades uus
operaator.
Sa pead a konstruktor teha uus
operaatori töö. Konstruktor on objekti objekt, mis paneb kokku a selle objekti uut eksemplari. Selle põhiline süntaks näeb välja selline:
uus ehitaja ()
Ehitaja saab nõustuda argumentidega mida saab kasutada omaduste muutmiseks või lisamiseks selle konstrueeritavale objektiastmele. Ehitaja on sama nimi kui objekt, kuhu see kuulub.
Siin on näide selle kohta, kuidas luua näiteks Kuupäev ()
objekti koos uus
märksõna:
dt = uus kuupäev (2017, 0, 1) console.log (dt) // pühapäev 01.01.2017 00:00:00 GMT + 0100
Kuupäev ()
on ehitaja, et luua uus Kuupäev
objekti. Erinevad konstruktorid objektile võtma erinevaid argumente sama tüüpi objektide esinemise loomiseks erinevad atribuudid.
Mitte kõiki JavaScripti sisseehitatud objekte ei saa näiteks sellisteks muuta Kuupäev
. On objekte, mida ärge tulge konstruktoriga: Matemaatika
, JSON
ja Mõtle
, kuid nad on ikka tavalised objektid.
Sisseehitatud objektide hulgas, millel on konstruktor (id), Sümbol
ei saa konstruktori stiilis kutsuda uue värskendamiseks Sümbol
näiteks. See võib olla ainult seda nimetatakse funktsiooniks mis annab uue Sümbol
väärtus.
Samuti ei vaja ehitajatega ehitatud objektide hulgas kõiki oma konstruktoreid uus
operaatorit, et seda saaks kasutada. Funktsioon
, Array
, Viga
, ja RegExp
võib nimetada ka funktsioone, ilma uus
võtmesõnaga, ja nad pakuvad uue objekti näiteks.
2. Mõtle
objekti
Taustaprogrammeerijad võivad olla juba tuttavad Reflection API-d. Peegeldus on programmeerimiskeele funktsioon kontrollima ja ajakohastama mõned põhiüksused, nagu objektid ja klassid, käitusajal.
JavaScriptis saate juba täita mõned peegeldusoperatsioone kasutades Objekt
. Aga a õige peegelduse API lõpuks tuli ka JavaScript.
The Mõtle
objektil on mitu meetodit objektide eksemplaride loomine ja uuendamine. The Mõtle
objekti ei ole konstruktorit, nii et seda ei saa kohelda uus
operaator, ja nagu ka Matemaatika
ja JSON
, seda seda ei saa nimetada funktsiooniks ka.
Kuid, Mõtle
on samaväärne uus
operaator: Reflect.construct ()
meetod.
Reflect.construct (sihtmärk, argumendidList [, newTarget])
Mõlemad sihtmärk
ja valikuline uus eesmärk
argumendid on objektid, millel on oma konstruktorid, samal ajal argumendidList
on argumentide loetelu tuleb edasi anda sihtmärk
.
var dt = Reflect.construct (kuupäev, [2017, 0, 1]); console.log (dt); // Püh 01.01.2017 00:00:00 GMT + 0100
Ülalolev kood on sama mõju nagu instantiating Kuupäev ()
kasutades uus
operaator. Kuigi saate siiski kasutada uus
, Peegeldus on ECMAScript 6 standard. See võimaldab teil ka kasutada uus eesmärk
argument, mis on veel üks eelis uus
operaator.
Väärtus uus eesmärk
prototüüp (täpne, see on. \ t uus eesmärk
ehitaja) muutub uue loodud prototüübi prototüüpiks.
Prototüüp on Objekti vara, mille väärtus on ka objekt, algse objekti omadused. Lühidalt öeldes saab objekt oma liikmed oma prototüübist.
Siin näeme näiteks:
klass A constructor () this.message = funktsioon () console.log ('sõnum A'st) klass B constructor () sõnum () console.log (' sõnum B'st) data () console.log ('andmed B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // sõnum A console.log (obj.data ()); // andmed B console.logist (obj instanceof B) // true
Läbi B
kolmanda argumendina Reflect.construct ()
, prototüübi väärtus obj
objekt on olema sama kui prototüüp B
konstruktor (millel on omadused) sõnum
ja andmeid
).
Seega, obj
pääseb juurde sõnum
ja andmeid
, selle prototüübist. Aga sellest ajast obj
on tehtud kasutades A
, tal on ka oma sõnum
seda saadud A
.
Kuigi obj
on ehitatud massiivina, see on mitte näiteks Array
, sest selle prototüüp on seatud Objekt
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // vale
Reflect.construct ()
võib olla kasulik, kui soovite objekti luua kasutades rohkem kui üht plaani.
3. Object.create ()
meetod
Samuti saate luua a uus tavaline objekt, millel on konkreetne prototüüp kaudu Object.create ()
. Ka see võib tunduda väga sarnane uus
operaator, kuid see pole.
Object.create (O [, propertiesObject])
The O
argument on objekt teenib prototüüpi uue loodud objekti jaoks. Vabatahtlik omadusedObject
argument on a omaduste loetelu võid lisada uue objekti juurde.
klass A constructor () message () console.log ('sõnum A'st) var obj = Object.create (uus A (), data: kirjutatav: tõene, konfigureeritav: tõene, väärtus: function () return 'data from obj') console.log (obj.message ()) // sõnum A console.log (obj.data ()) // andmed obj obj1 = Object.create ( uus A (), foo: kirjutatav: tõene, konfigureeritav: tõene, väärtus: funktsioon () return 'foo obj1') console.log (obj1.message ()) // sõnum A-konsoolilt. log (obj1.foo ()) // foo obj1-st
In obj
objekt, lisatav vara on andmeid
, ajal obj1
, see on foo
. Niisiis, nagu näete, võib meil olla uude objekti lisatud omadused ja meetodid.
See on suurepärane, kui soovite luua mitut sama liiki objekti kuid koos erinevad täiendavad omadused või meetodid. The Object.create ()
süntaks salvestab kõik nende kodeerimise probleemid.