Objektumorientált JavaScript (OOJS) 3 mód az objektum példányok létrehozására
Amikor egy programozási nyelv van minden tárgyról, az első dolog, amit meg kell tanulnunk hogyan hozhat létre objektumokat. Az objektumok létrehozása a JavaScript-ben meglehetősen egyszerű: egy pár göndör nadrágtartó ezt a feladatot azonban elvégzi sem az egyetlen út objektum létrehozásához sem az egyetlen módja soha nem kell használni.
A JavaScript-ben az objektum példányok beépített objektumokból készült és a program futásakor jön létre. Például, Dátum
egy beépített objektum, amely tájékoztatást nyújt a dátumokról. Ha szeretnénk megjeleníteni az aktuális dátumot egy oldalon, mi kell egy futásidejű példány Dátum
amely az aktuális dátumra vonatkozó információkat tartalmazza.
A JavaScript lehetővé teszi számunkra is definiálja saját objektumainkat amelyek saját objektumpéldányokat hozhatnak létre futás közben. A JavaScript, minden egy tárgy és minden objektumnak van egy végső őse hívott Tárgy
. Az objektumpéldány létrehozását hívják példányosítás.
1. A új
operátor
Az új objektumpéldány létrehozásának egyik leggyakoribb és legismertebb módja a használni a új
operátor.
Neked kell egy konstruktőr az új
üzemeltető. A konstruktor egy olyan módszer, amely egy objektumot összeállít új objektuma. Alapvető szintaxisa így néz ki:
új kivitelező ()
Egy kivitelező tud fogadja el az érveket amelyek segítségével megváltoztathatja vagy hozzáadhatja a tulajdonságokat az általa konstruált objektumpéldányhoz. A kivitelező ugyanaz a neve mint az objektum, amelyhez tartozik.
Íme egy példa arra, hogyan hozhat létre egy példája Dátum()
tárgy a ... val új
kulcsszó:
dt = új dátum (2017, 0, 1) console.log (dt) // nap január 01 2017 00:00:00 GMT + 0100
Dátum()
a konstruktor egy új létrehozása Dátum
tárgy. Különböző konstrukciók egy tárgyhoz különböző érveket azonos objektum példányok létrehozásához változatos attribútumok.
A JavaScript összes beépített objektumát nem lehet megjavítani Dátum
. Vannak olyan tárgyak, amelyek ne jöjjön el egy kivitelezővel: Math
, JSON
és tükröznie
, de még mindig rendes tárgyak.
A beépített objektumok közül, amelyek konstruktorral rendelkeznek, Szimbólum
nem lehet a konstruktor stílusában hívni újdonságot ad Szimbólum
példa. Csak lehet függvénynek hívják amely új értéket ad vissza Szimbólum
érték.
Továbbá, a beépített objektumok között, amelyek konstruktorral rendelkeznek, nem mindenkinek kell a konstruktorukat hívni új
operátor számára, hogy az azonnal elérhető legyen. Funkció
, Sor
, Hiba
, és RegExp
funkcióként is nevezhető, használata nélkül új
kulcsszó, és új objektumpéldányt fognak megjeleníteni és visszaadni.
2. A tükröznie
tárgy
Előfordulhat, hogy a háttérprogramozók már ismerik Reflection API-k. A reflexió a programozási nyelvek egyik jellemzője egyes alapelemek ellenőrzése és frissítése, például tárgyak és osztályok, futásidőben.
A JavaScriptet már elvégezheti néhány reflexiós műveletek Tárgy
. De, a megfelelő reflexiós API végül jött létre a JavaScript is.
A tükröznie
az objektumnak számos módja van objektumpéldányok létrehozása és frissítése. A tükröznie
tárgy nincs építője, így nem lehet az új
operátor, és, mint ahogy Math
és JSON
, azt nem lehet függvénynek nevezni bármelyik.
azonban, tükröznie
van egy egyenértékű új
operátor: a Reflect.construct ()
eljárás.
Reflect.construct (cél, argumentumokLista [, newTarget])
Mind a cél
és az opcionális NEWTARGET
érvek saját konstruktorral rendelkező tárgyak, míg argumentsList
egy érvek listája át kell adni a cél
.
var dt = Reflect.construct (dátum, [2017, 0, 1]); console.log (dt); // 2017. január 01. 00:00:00 GMT + 0100
A fenti kód ugyanaz a hatása mint azonnali Dátum()
használni a új
operátor. Bár továbbra is használhatja új
, A reflexió egy ECMAScript 6 szabvány. Azt is lehetővé teszi, hogy használja a NEWTARGET
érv, ami egy másik előny az új
operátor.
Az értéke NEWTARGET
prototípusa (pontosan ez a prototípus. \ t NEWTARGET
építője) az újonnan létrehozott példány prototípusává válik.
A prototípus a egy objektum tulajdonsága, amelynek értéke az egy tárgy is, az eredeti objektum tulajdonságait hordozza. Röviden, egy objektum a tagjait a prototípusától kapja.
Itt lássunk egy példát:
A osztály constructor () this.message = függvény () console.log ('üzenet A') B osztály konstruktor () üzenet () console.log ('üzenet a B-ből') data () console.log ('adatok B') obj = Reflect.construct (A, [], B) console.log (objekt.message ()); // üzenet az A console.log (objekt.data ()); // adatok a B console.log-ból (objekt példány B) // true
Elhaladva B
mint harmadik érv Reflect.construct ()
, a. \ t obj
objektum ugyanaz mint a prototípus B
építője (amely rendelkezik a tulajdonságokkal üzenet
és adat
).
És így, obj
hozzáférhet a üzenet
és adat
, prototípusában. De azóta obj
készült A
, ez is saját üzenet
azt feladó A
.
Annak ellenére obj
tömbként van felépítve, ez az nem egy példány Sor
, mert a prototípusa be van állítva Tárgy
.
obj = Reflect.construct (Array, [1,2,3], Object) console.log (obj) // Array [1, 2, 3] console.log (objekt példány Array) // hamis
Reflect.construct ()
hasznos lehet, ha objektumot szeretne létrehozni több mint egy tervet használ.
3. A Object.create ()
eljárás
Létrehozhat a új szokásos objektum egy meghatározott prototípussal keresztül Object.create ()
. Ez is nagyon hasonlónak tűnhet a új
operátor, de nem.
Object.create (O [, tulajdonságokObjektum])
A O
az érv objektum a prototípust szolgálja az új létrehozandó objektumhoz. Az opcionális propertiesObject
érv a tulajdonságok listája érdemes hozzáadni az új objektumhoz.
A osztály konstruktor () üzenet () console.log („üzenet az A-tól”) var obj = Object.create (új A (), data: írható: igaz, konfigurálható: igaz, érték: function () return 'data from obj') console.log (objekt.message ()) // üzenet az A console.log (objekt.data ()) // adat obj objekt1 = Object.create ( új A (), foo: írható: igaz, konfigurálható: igaz, érték: függvény () return 'foo az obj1')) console.log (obj1.message ()) // üzenet az A konzolból. log (obj1.foo ()) // foo az obj1-ből
Ban,-ben obj
objektum, a hozzáadott tulajdonság adat
, közben obj1
, ez ize
. Tehát, ahogy látod, lehet új objektumhoz hozzáadott tulajdonságok és módszerek.
Ez nagyszerű, ha létrehozni szeretne több azonos típusú objektum de különböző kiegészítő tulajdonságok vagy módszerek. A Object.create ()
a szintaxis megmenti a hibákat, hogy mindegyiket külön kódolja.