Objektinis „JavaScript“ (OOJS) 3 būdai sukurti objektų situacijas
Kai yra programavimo kalba viskas apie objektus, pirmas dalykas, kurį turime išmokti, yra kaip sukurti objektus. „Google“ objektų kūrimas yra gana paprastas: pora garbanotųjų petnešų tai atliks darbą nei vienintelis būdas sukurti objektą nei vienintelis būdas jums reikės naudoti.
„JavaScript“ objekto egzemplioriai yra sukurtas iš įmontuotų objektų ir atsiranda, kai programa veikia. Pavyzdžiui, Data
yra integruotas objektas, suteikiantis mums informaciją apie datas. Jei norime parodyti dabartinę datą puslapyje, mes reikia runtime instancijos Data
kuri pateikia informaciją apie dabartinę datą.
„JavaScript“ taip pat leidžia mums apibrėžti savo pačių objektus kurie gali sukurti savo objektų egzempliorius vykdymo metu. „JavaScript“, viskas yra objektas ir kiekvienas objektas turi galutinis protėvis vadinamas Objektas
. Objekto pavyzdžio kūrimas vadinamas demonstravimas.
1. naujas
operatorius
Vienas iš labiausiai paplitusių ir gerai žinomų būdų sukurti naują objekto pavyzdį yra naudojant naujas
operatorius.
Jums reikia a konstruktorius padaryti naujas
operatorius. Konstruktorius yra objekto metodas, kuris sujungia a naują šio objekto egzempliorių. Jos pagrindinė sintaksė atrodo taip:
naujas konstruktorius ()
Konstruktorius gali priimti argumentus kuris gali būti naudojamas keisti ar pridėti savybių, kurias jis sukonstruoja. Konstruktorius turi tą patį pavadinimą kaip objektas, kuriam jis priklauso.
Štai pavyzdys, kaip sukurti pavyzdys Data()
objektą su naujas
raktinis žodis:
dt = nauja data (2017, 0, 1) console.log (dt) // Sa. sausis 01 2017 00:00:00 GMT + 0100
Data()
yra konstruktorius sukurti naują Data
objektą. Įvairūs objekto konstruktoriai priimti skirtingus argumentus sukurti tokio paties tipo objekto egzempliorius įvairūs atributai.
Ne visi „JavaScript“ integruoti objektai gali būti ištekliai panašūs Data
. Yra objektų ne ateiti su konstruktoriumi: Matematika
, JSON
ir Atspindi
, bet jie vis dar yra paprasti objektai.
Tarp įmontuotų objektų, turinčių konstruktorių (-us), Simbolis
negali būti vadinamas konstruktoriaus stiliaus atnaujinti naują Simbolis
instancija. Tai gali būti tik vadinama funkcija kuris grąžina naują Simbolis
vertė.
Be to, tarp įmontuotų objektų, turinčių konstruktorių (-ų), ne visi turi turėti savo konstruktorių naujas
operatorius. Funkcija
, Array
, Klaida
, ir RegExp
taip pat gali būti vadinamos funkcijomis, nenaudojant naujas
raktinis žodis, ir jie atgaivins ir grąžins naują objekto pavyzdį.
2. Atspindi
objektą
Programinės įrangos programuotojai gali būti jau susipažinę Refleksijos API. Atspindėjimas yra programavimo kalbų bruožas tikrinti ir atnaujinti kai kuriuos pagrindinius subjektus, pavyzdžiui, objektai ir klasės, vykdymo metu.
„JavaScript“ sistemoje jau galite atlikti kai kurie refleksijos operacijos naudojant Objektas
. Bet, a tinkamas atspindėjimo API galiausiai atsirado ir „JavaScript“.
The Atspindi
objektas turi metodų rinkinį kurti ir atnaujinti objekto atvejus. The Atspindi
objektą neturi konstruktoriaus, todėl jis negali būti suaktyvintas su naujas
operatorius, ir, kaip ir Matematika
ir JSON
, ji negali būti vadinama funkcija taip pat.
Tačiau, Atspindi
turi ekvivalentas naujas
operatorius: Reflect.construct ()
metodas.
Reflect.construct (taikinys, argumentaiList [, newTarget])
Tiek tikslą
ir neprivaloma naujasTikslinis
argumentai objektai, turintys savo konstruktorius, kol argumentaiList
yra argumentų sąrašas būti perduodamas tikslą
.
var dt = Reflect.construct (Data, [2017, 0, 1]); console.log (dt); // Sausis 01 2017 2017 00:00:00 GMT + 0100
Aukščiau nurodytas kodas turi tą patį poveikį kaip momentiniuoti Data()
naudojant naujas
operatorius. Nors vis tiek galite naudoti naujas
, Refleksija yra ECMAScript 6 standartas. Jis taip pat leidžia jums pasinaudoti naujasTikslinis
argumentas, kuris yra dar vienas pranašumas prieš naujas
operatorius.
Vertė naujasTikslinis
prototipas (būtent tai prototipas). \ t naujasTikslinis
konstruktorius) tampa naujai sukurtos instancijos prototipu.
Prototipas yra Objekto nuosavybė, kurių vertė yra taip pat objektas, pirminio objekto savybes. Trumpai tariant, objektas gauna savo narius iš prototipo.
Čia pamatysime pavyzdį:
A klasė constructor () this.message = funkcija () console.log („pranešimas iš A“) B klasė constructor () pranešimas () console.log („pranešimas iš B“) data () console.log („duomenys iš B ') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // pranešimas iš A console.log (obj.data ()); // duomenys iš B console.log (obj instanceof B) // true
Perduodami B
kaip trečiasis argumentas Reflect.construct ()
, prototipo vertė. \ t obj
objektas yra padaryti tą patį kaip prototipas B
konstruktorius (turintis savybes) pranešimą
ir duomenis
).
Taigi, obj
gali pasiekti pranešimą
ir duomenis
, prototipą. Bet nuo to laiko obj
yra pagamintas naudojant A
, ji taip pat turi savo pranešimą
ji gautas nuo A
.
Nors obj
yra sukurtas kaip masyvas ne Array
, kadangi jo prototipas yra nustatytas Objektas
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false
Reflect.construct ()
gali būti naudinga, kai norite sukurti objektą naudojant daugiau nei vieną projektą.
3. Object.create ()
metodas
Taip pat galite sukurti a naujas paprastas objektas su konkrečiu prototipu per Object.create ()
. Tai taip pat gali atrodyti labai panaši į naujas
operatorius, bet ne.
Object.create (O [, propertiesObject])
The O
argumentas yra objektas tarnauja prototipui naujam objektui, kuris bus sukurtas. Neprivaloma savybėsObject
argumentas yra a savybių sąrašas galbūt norėsite pridėti naują objektą.
A klasė constructor () message () console.log („pranešimas iš A“) var obj = Object.create (naujas A (), data: rašoma: tiesa, konfigūruojama: tiesa, vertė: function () return 'data from obj') console.log (obj.message ()) // žinutė iš A console.log (obj.data ()) // duomenys iš obj obj1 = Object.create ( naujas A (), foo: writeable: true, configurable: true, reikšmė: funkcija () return 'foo iš obj1') console.log (obj1.message ()) // pranešimas iš A konsolės. žurnalas (obj1.foo ()) // foo iš obj1
Viduje konors obj
objektas, pridėtas turtas yra duomenis
, o obj1
, tai yra foo
. Taigi, kaip matote, mes galime turėti ypatybės ir metodai, įtraukti į naują objektą.
Tai puiku, kai norite sukurti daugelio tos pačios rūšies objektų bet su skirtingų papildomų savybių ar metodų. The Object.create ()
sintaksė taupo visas jų kodavimo problemas.