Object-Oriented JavaScript (OOJS) 3 spôsoby vytvárania inštancií objektov
Keď je programovací jazyk všetko o objektoch, prvá vec, ktorú potrebujeme učiť, je ako vytvoriť objekty. Vytváranie objektov v jazyku JavaScript je pomerne jednoduché: dvojica kučeravých závesov bude to robiť práca, to však je ani jediný spôsob vytvoriť objekt ani jediný spôsob budete niekedy potrebovať použiť.
V jazyku JavaScript sú inštancie objektov vytvorené z vstavaných objektov a vzniká, keď program beží. Napríklad, dátum
je vstavaný objekt, ktorý nám poskytuje informácie o dátumoch. Ak chceme zobraziť aktuálny dátum na stránke, my potrebuje runtime inštanciu dátum
ktorá obsahuje informácie o aktuálnom dátume.
JavaScript nám tiež umožňuje definovať vlastné predmety ktoré môžu produkovať svoje vlastné objektové inštancie za behu. V jazyku JavaScript, všetko je objekt a každý objekt má konečný predok volal objekt
. Vytvorí sa vytvorenie inštancie objektu inštancie.
1. The Nový
operátor
Jedna z najbežnejších a najznámejších metód na vytvorenie novej inštancie objektu je pomocou Nový
operátor.
Potrebujete a staviteľ urobiť Nový
operátora. Konštruktor je metóda objektu, ktorý spája a nová inštancia daného objektu. Jeho základná syntax vyzerá takto:
nový konštruktor ()
Konštruktér môže prijať argumenty ktoré sa dajú použiť na zmenu alebo pridanie vlastností do inštancie objektu, ktorú vytvára. Konštruktor má rovnaký názov ako objekt, do ktorého patrí.
Tu je príklad, ako vytvoriť príklad Date ()
objekt s Nový
Kľúčové slovo:
dt = new Dátum (2017, 0, 1) console.log (dt) // Ne 01.01 2017 00:00:00 GMT + 0100
Date ()
je konštruktér vytvoriť nový dátum
objekt. Rôzne konštruktory pre objekt urobiť rôzne argumenty na vytvorenie rovnakého druhu inštancií objektu rôzne atribúty.
Nie všetky vstavané objekty v jazyku JavaScript môžu byť inštanktované ako dátum
. Existujú predmety neprichádzajte s konštruktérom: matematika
, JSON
a odrážať
, ale sú to stále bežné predmety.
Medzi zabudovanými objektmi, ktoré majú konštruktér (y), symbol
nemožno vo štýle konštruktora zavolať na inštanciu nového symbol
inštancie. To môže byť len nazývaná ako funkcia ktorý vráti nový symbol
hodnota.
Aj medzi vstavanými objektmi, ktoré majú konštruktér (y), nie všetci potrebujú, aby ich konštruktéri boli zavolaní Nový
operátora, aby sa vytvoril inštancia. funkcie
, rad
, Chyba
, a regexp
môžu byť tiež nazývané ako funkcie, bez použitia Nový
kľúčové slovo a budú inštanktovať a vrátiť inštanciu nového objektu.
2. The odrážať
objekt
Programovanie backendov môže byť už známe Reflection APIs. Reflexia je funkcia programovacích jazykov skontrolovať a aktualizovať niektoré základné entity, ako sú objekty a triedy, pri behu.
V prehliadači JavaScript ste už mohli hrať niektorí reflexné operácie používajúce objekt
. Ale a správne API reflexie nakoniec prišiel aj do jazyka JavaScript.
odrážať
objekt má súbor metód vytvárať a aktualizovať inštancie objektov. odrážať
objekt nemá konštruktéra, takže nemôže byť inštanciou s Nový
operátora a podobne matematika
a JSON
, to nemožno nazvať ako funkciu buď.
však, odrážať
má ekvivalent Nový
operátor: Reflect.construct ()
metóda.
Reflect.construct (cieľ, argumentyZoznam [, newTarget])
Obaja terč
a voliteľné newTarget
argumenty sú objekty majú svoje vlastné konštruktory, zatiaľ čo argumentsList
je a zoznam argumentov ktoré majú byť odovzdané konštruktérovi terč
.
var dt = Reflect.construct (Dátum, [2017, 0, 1]); console.log (dt); // Ne 01.01.2017 00:00:00 GMT + 0100
Kód uvedený vyššie má rovnaký účinok ako inštancia Date ()
pomocou Nový
operátor. Hoci môžete stále používať Nový
, Odraz je Štandard ECMAScript 6. To tiež umožňuje využitie newTarget
argument, čo je ďalšia výhoda oproti Nový
operátor.
Hodnota newTarget
je to prototyp (presne to je prototyp newTarget
je konštruktér) stane prototypom novo vytvorenej inštancie.
Prototyp je vlastníctva objektu, ktorej hodnota je tiež objekt, ktoré nesú vlastnosti pôvodného objektu. Stručne povedané, objekt dostane svojich členov z prototypu.
Tu ukážeme príklad:
class constructor () this.message = function () console.log ('message from A') dáta () console.log ('dáta z B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // message from console.log (obj.data ()); // dáta z B console.log (obj instanceof B) // true
Prechodom B
ako tretí argument Reflect.construct ()
, prototypová hodnota obj
objekt je aby boli rovnaké ako prototyp B
(ktorý má vlastnosti správa
a dáta
).
teda, obj
môžu pristupovať k správa
a dáta
, k dispozícii na svojom prototype. Ale odvtedy obj
sa používa , má tiež svoje vlastné
správa
to prijaté od .
Aj keď obj
je konštruovaná ako pole, je nie je to príklad rad
, pretože jeho prototyp je nastavený na objekt
.
obj = Reflect.construct (Array, [1,2,3], Object)) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array)
Reflect.construct ()
môže byť užitočné, keď chcete vytvoriť objekt pomocou viac ako jedného plánu.
3. The Object.create ()
metóda
Môžete tiež vytvoriť nový bežný objekt so špecifickým prototypom via Object.create ()
. Aj toto by sa mohlo veľmi podobať použitiu Nový
operátora, ale nie je.
Object.create (O [, vlastnostiObject])
O
argument je objekt, ktorý slúži prototypu pre nový objekt, ktorý sa vytvorí. Voliteľné propertiesObject
argument je a zoznam vlastností možno budete chcieť pridať do nového objektu.
class A konštruktor () správa () console.log ('správa z A') var obj = Object.create (nový A (), data: ())) z konsole.log (obj.data ()) // dáta z obj obj1 = Object.create () nový A (), foo: zapisovateľný: true, konfigurovateľný: true, hodnota: function () return 'foo z obj1') console.log (obj1.message ()) // message from Console. log (obj1.foo ()) // foo z obj1
V obj
objekt, pridaná vlastnosť je dáta
, zatiaľ čo v obj1
, to je foo
. Takže, ako vidíte, môžeme mať vlastnosti a metódy pridané do nového objektu.
To je skvelé, keď chcete vytvoriť viacerých objektov rovnakého druhu ale s rôzne doplnkové vlastnosti alebo metódy. Object.create ()
syntax ukladá problémy s kódovaním všetkých z nich samostatne.