Objektu orientēta JavaScript (OOJS) 3 veidi, kā izveidot objektu gadījumus
Kad ir programmēšanas valoda viss par objektiem, pirmā lieta, kas mums jāmācās, ir kā izveidot objektus. Objektu izveide JavaScript ir diezgan vienkārša: pāris cirtaini bikšturi tomēr darīs darbu, tas ir ne vienīgais veids lai izveidotu objektu ne vienīgais veids jums kādreiz būs jāizmanto.
JavaScript, objektu gadījumi ir izveidots no iebūvētiem objektiem un nāk klajā ar programmu, kad programma darbojas. Piemēram, Datums
ir iebūvēts objekts, kas sniedz mums informāciju par datumiem. Ja mēs vēlamies parādīt pašreizējo datumu lapā, mēs nepieciešams runtime instancē Datums
kas satur informāciju par pašreizējo datumu.
JavaScript arī ļauj mums definēt mūsu pašu objektus kas var radīt savus objektu gadījumus runtime. JavaScript, viss ir objekts un katram objektam ir galīgais senčs sauc Objekts
. Tiek izsaukts objekta gadījuma izveide aktuācija.
1. jauns
operatoram
Viena no visbiežāk sastopamajām un pazīstamākajām metodēm, kā izveidot jaunu objektu piemēru, ir izmantojot jauns
operatoram.
Jums ir nepieciešams konstruktors padarīt jauns
operatora darbs. Konstruktors ir objekta metode, kas apvieno a jauns objekts. Tā pamata sintakse izskatās šādi:
jauns konstruktors ()
Konstruktors var pieņemt argumentus ko var izmantot, lai mainītu vai pievienotu rekvizītus, ko tā konstruē objektu instancē. Konstruktors tam ir tāds pats nosaukums kā objektu, kuram tas pieder.
Šeit ir piemērs, kā izveidot piemēram Datums()
objektu Ar jauns
atslēgvārds:
dt = jauns datums (2017, 0, 1) console.log (dt) // Saule 01.01.2017 00:00:00 GMT + 0100
Datums()
ir konstruktors, lai izveidotu jaunu Datums
objektu. Dažādi objekta konstruktori pieņemt dažādus argumentus lai izveidotu vienādus objektu gadījumus ar dažādi atribūti.
Ne visi JavaScript iebūvētie objekti var tikt demonstrēti kā Datums
. Ir objekti, kas nenāk ar konstruktoru: Matemātika
, JSON
un Atspoguļojiet
, bet viņi joprojām ir parastie objekti.
Starp iebūvētajiem objektiem, kuriem ir konstruktors (-i), Simbols
nevar izsaukt konstruktora stilā lai parādītu jaunu Simbols
piemēram. Tas var būt tikai sauc par funkciju kas atgriež jaunu Simbols
vērtību.
Arī starp iebūvētajiem objektiem, kuriem ir konstruktors (-i), ne visi ir vajadzīgi to konstruktori jauns
operatoram, lai to varētu izmantot. Funkcija
, Array
, Kļūda
, un RegExp
var arī saukt par funkcijām, neizmantojot jauns
atslēgvārdu, un tie tiks atjaunināti un atgriezti jaunā objekta instancē.
2. Atspoguļojiet
objektu
Iespējams, jau ir iepazinušies ar programmētāju programmām Pārdomu API. Pārdomas ir programmēšanas valodu iezīme pārbaudīt un atjaunināt dažas pamatvienības, piemēram, objekti un klases, runtime.
JavaScript, jūs jau varētu veikt daži pārdomu operācijas, izmantojot Objekts
. Bet, a pareiza Reflection API beidzot atnāca arī JavaScript.
The Atspoguļojiet
objektam ir virkne metožu izveidot un atjaunināt objekta gadījumus. The Atspoguļojiet
objektu nav konstruktora, tāpēc to nevar iztulkot ar jauns
operatoram, un, tāpat kā Matemātika
un JSON
, to nevar saukt par funkciju arī.
Tomēr, Atspoguļojiet
ir ekvivalents jauns
operatoram: Reflect.construct ()
metodi.
Reflect.construct (mērķa, argumentiList [, newTarget])
Gan mērķi
un izvēles jaunais mērķis
argumenti objekti, kuriem ir savi konstruktori, kamēr argumentiList
ir argumentu saraksts jānodod mērķi
.
var dt = Reflect.construct (Datums, [2017, 0, 1]); console.log (dt); // Saule 01.01.2017. 00:00:00 GMT + 0100
Iepriekš minētais kods tam ir tāda pati ietekme kā tūlītēju Datums()
izmantojot jauns
operatoram. Lai gan jūs joprojām varat izmantot jauns
, Pārdomas ir ECMAScript 6 standarts. Tas arī ļauj jums izmantot jaunais mērķis
arguments, kas ir vēl viena priekšrocība salīdzinājumā ar jauns
operatoram.
Vērtība jaunais mērķis
prototips (precīzi tas ir. \ t jaunais mērķis
konstruktors) kļūst par jaunizveidotā gadījuma prototipu.
Prototips ir Objekta īpašums, kuru vērtība ir arī objekts, sākotnējā objekta īpašības. Īsāk sakot, objekts iegūst tās locekļus no tā prototipa.
Šeit redzēsim piemēru:
A klase constructor () this.message = funkcija () console.log ('ziņa no A') klase B konstruktors () ziņojums () console.log ('ziņojums no B') data () console.log ('dati no B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // ziņojums no A console.log (obj.data ()); // dati no B console.log (obj instanceof B) // true
Ar iet B
kā trešo argumentu Reflect.construct ()
, prototipa vērtība. \ t obj
objekts ir vienādi kā prototips B
konstruktors (kam piemīt īpašības) ziņu
un datus
).
Tādējādi, obj
var piekļūt ziņu
un datus
, prototips. Bet kopš tā laika obj
tiek izgatavots, izmantojot A
, tai ir arī savs ziņu
to saņemts no A
.
Pat ja obj
ir veidots kā masīvs, tas ir ne Array
, jo tā prototips ir iestatīts uz Objekts
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
var būt noderīga, ja vēlaties izveidot objektu izmantojot vairāk nekā vienu projektu.
3. Object.create ()
metodi
Varat arī izveidot a jauns parasts objekts ar īpašu prototipu caur Object.create ()
. Arī tas varētu būt ļoti līdzīgs lietojumam jauns
operatoram, bet tā nav.
Object.create (O [, propertiesObject])
The O
arguments ir objekts kalpo prototipam jaunajam objektam, kas tiks izveidots. Izvēles īpašībasObject
arguments ir a īpašību saraksts jūs varat pievienot jaunajam objektam.
A klases konstruktors () ziņojums () console.log ('ziņojums no A') var obj = Object.create (jauns A (), data: rakstāms: taisnība, konfigurējams: patiess, vērtība: function () return 'dati no obj') console.log (obj.message ()) // ziņojums no A console.log (obj.data ()) // dati no obj obj1 = Object.create ( jauns A (), foo: rakstāms: true, konfigurējams: true, vērtība: funkcija () return 'foo no obj1') console.log (obj1.message ()) // ziņojums no A konsoles. log (obj1.foo ()) // foo no obj1
Iekš obj
objekts, pievienots īpašums datus
, kamēr atrodaties obj1
, tas ir foo
. Tātad, kā jūs redzat, mums var būt īpašībām un metodēm, kas pievienotas jaunam objektam.
Tas ir lieliski, ja vēlaties izveidot vairāki vienāda veida objekti bet ar atšķirīgas papildu īpašības vai metodes. The Object.create ()
sintakse saglabā nepatikšanas kodēt visus tos atsevišķi.