Object-Oriented JavaScript (OOJS) 3 modalități de a crea instanțe obiect
Când este un limbaj de programare totul despre obiecte, primul lucru pe care trebuie să-l învățăm este cum să creați obiecte. Crearea obiectelor în JavaScript este destul de ușoară: o pereche de bretele curbate va face treaba, cu toate acestea nici singura cale pentru a crea un obiect nici singura cale va trebui vreodată să o utilizați.
În JavaScript, instanțele de obiecte sunt create din obiecte încorporate și apar la apariția programului. De exemplu, Data
este un obiect încorporat care ne oferă informații despre date. Dacă vrem să afișăm data curentă pe o pagină, noi nevoie de o instanță de executare de Data
care transporta informații despre data curentă.
De asemenea, JavaScript ne permite să definesc propriile noastre obiecte care pot produce propriile instanțe de obiecte în timpul rulării. În JavaScript, totul este un obiect și fiecare obiect are un ultim strămoș denumit Obiect
. Se numește crearea unei instanțe de obiect instanțierea.
1. The nou
operator
Una dintre cele mai comune și bine cunoscute metode de a crea o instanță nouă de obiecte este prin folosind nou
operator.
Ai nevoie de constructor pentru a face nou
operarea operatorului. Un constructor este o metodă a unui obiect care pune împreună a noua instanță a obiectului respectiv. Sintaxa sa de bază arată astfel:
constructor nou ()
Un constructor poate acceptă argumente care pot fi folosite pentru a schimba sau a adăuga proprietăți la instanța de obiect pe care o construiește. Constructorul are același nume ca obiect de care aparține.
Iată un exemplu de creare a unui exemplul Data()
obiect cu nou
cuvinte cheie:
dt = new Data (2017, 0, 1) console.log (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100
Data()
este constructorul pentru a crea un nou Data
obiect. Constructori diferiți pentru un obiect ia argumente diferite pentru a crea aceleași instanțe de obiecte cu atribute variate.
Nu toate obiectele încorporate în JavaScript pot fi instanțiate ca Data
. Există obiecte nu vin cu un constructor: Math
, JSON
și Reflectați
, dar ele sunt încă obiecte obișnuite.
Printre obiectele încorporate care au constructor (e), Simbol
nu pot fi chemați în stilul constructorului să instanțiate un nou Simbol
instanță. Poate fi doar numită ca o funcție care returnează un nou Simbol
valoare.
De asemenea, printre obiectele încorporate care au constructor (e), nu toate au nevoie de constructorii lor pentru a fi chemați cu nou
operator pentru a fi instanțiată. Funcţie
, mulțime
, Eroare
, și RegExp
pot fi numite și funcții, fără a utiliza nou
cuvânt cheie și vor instanțiza și returna o instanță nouă de obiect.
2. The Reflectați
obiect
Programatorii din backend ar putea fi deja familiarizați cu Reflection APIs. Reflecția este o caracteristică a limbajelor de programare inspectați și actualizați unele dintre entitățile de bază, cum ar fi obiectele și clasele, la timpul de execuție.
În JavaScript, puteți deja să efectuați niste folosind operațiunile de reflexie Obiect
. Dar, a API adecvat de reflecție în cele din urmă a venit și în JavaScript.
Reflectați
obiect are un set de metode pentru a creați și actualizați instanțe de obiecte. Reflectați
obiect nu are un constructor, deci nu poate fi instanțiată cu nou
operator, și, la fel Math
și JSON
, aceasta nu poate fi numit ca o funcție fie.
in orice caz, Reflectați
are un echivalentul nou
operator: Reflect.construct ()
metodă.
Reflect.construct (țintă, argumenteList [, newTarget])
Amandoua ţintă
și opțional newTarget
argumentele sunt obiecte având constructori proprii, in timp ce argumentsList
este a liste de argumente să fie transmisă constructorului ţintă
.
var dt = Reflect.construct (Data, [2017, 0, 1]); console.log (dt); // Sun Jan 01 2017 00:00:00 GMT + 0100
Codul de mai sus are același efect ca instanțiere Data()
folosind nou
operator. Deși puteți utiliza în continuare nou
, Reflecția este una ECMAScript 6 standard. De asemenea, vă permite să să utilizeze newTarget
argument, care este un alt avantaj față de nou
operator.
Valoarea a newTarget
(pentru a fi exact, este prototipul lui newTarget
constructorul) devine prototipul noului exemplu creat.
Un prototip este proprietatea unui obiect, a căror valoare este de asemenea, un obiect, care poartă proprietățile obiectului original. Pe scurt, un obiect își face membrii din prototipul său.
Aici, să vedem un exemplu:
console.log ("mesaj de la B")) date () console.log ('date din B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // mesaj de la un console.log (obj.data ()); // date de la console.log B (obj instanță B) // true
Trecând B
ca al treilea argument Reflect.construct ()
, - valoarea prototipului obj
obiect este făcut ca să fie același ca prototip al lui B
(care are proprietățile mesaj
și date
).
Prin urmare, obj
pot accesa mesaj
și date
, disponibil la prototipul său. Dar de atunci obj
se face folosind A
, de asemenea, are propriile sale mesaj
aceasta primit de la A
.
Chiar dacă obj
este construit ca o matrice, este nu o instanță mulțime
, deoarece prototipul său este setat la Obiect
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array)
Reflect.construct ()
poate fi util atunci când doriți să creați un obiect folosind mai mult de un model.
3. The Object.create ()
metodă
Puteți crea, de asemenea, o obiect obișnuit cu un prototip specific prin intermediul Object.create ()
. Și acest lucru ar putea părea foarte asemănător cu utilizarea nou
operator, dar nu este.
Object.create (O [, proprietățiObject])
O
argument este un obiect care servește prototipul pentru obiectul nou care va fi creat. Opțional propertiesObject
argumentul este a lista de proprietăți este posibil să doriți să adăugați la noul obiect.
() var var = Object.create (nou A (), data: writable: true, ())) console.log (obj.message ()) // mesaj din console.log (obj.data ()) // date din obj obj1 = Object.create () () return: foo de la obj1 console.log (obj1.message ()) // mesaj de la O consolă. log (obj1.foo ()) // foo de la obj1
În obj
obiect, proprietatea adăugată este date
, in timp ce in obj1
, este foo
. Deci, după cum vedeți, putem avea proprietățile și metodele adăugate la un obiect nou.
Acest lucru este minunat atunci când doriți să creați obiecte multiple de același tip dar cu diferite proprietăți sau metode suplimentare. Object.create ()
sintaxa salvează problema de a le codifica separat.