Úvodná » kódovanie » Object-Oriented JavaScript (OOJS) 3 spôsoby vytvárania inštancií objektov

    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ť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 newTargetje to prototyp (presne to je prototyp newTargetje 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.