Domača » Kodiranje » Objektno usmerjeni JavaScript (OOJS) 3 načini za ustvarjanje primerov predmetov

    Objektno usmerjeni JavaScript (OOJS) 3 načini za ustvarjanje primerov predmetov

    Ko je programski jezik vse o predmetih, prva stvar, ki se moramo naučiti je kako ustvariti predmete. Ustvarjanje objektov v JavaScriptu je dokaj enostavno: par kodrastih oklepajev vendar bo to opravilo niti edini način ustvariti predmet niti edini način boste kdaj potrebovali.

    V JavaScriptu so primeri objektov ustvarjene iz vgrajenih predmetov in se pojavijo, ko se program izvaja. Na primer, Datum je vgrajen objekt, ki nam daje informacije o datumih. Če želimo prikazati trenutni datum na strani, bomo potrebujete primer izvajanja Datum ki vsebuje informacije o trenutnem datumu.

    JavaScript nam omogoča tudi določite lastne objekte ki lahko izdelajo svoje primerke predmetov v času izvajanja. V JavaScript, vse je predmet in vsak objekt ima končni prednik imenuje Objekt. Vzpostavi se izdelava primerka objekta primer.

    1. novo operaterja

    Eden od najpogostejših in najbolj znanih metod za ustvarjanje novega primerka objekta je uporabljati novo operaterja.

    Potrebujete a konstruktor narediti novo delo upravljavca. Konstruktor je metoda predmeta, ki združuje a nov primer tega objekta. Njegova osnovna skladnja izgleda takole:

     nov konstruktor () 

    Konstruktor lahko sprejemajo argumente ki se lahko uporablja za spreminjanje ali dodajanje lastnosti primerku objekta, ki ga konstruira. Konstruktor ima isto ime kot predmet, ki mu pripada.

    Tukaj je primer, kako ustvariti na primer Datum () predmet z novo ključna beseda:

     dt = new Datum (2017, 0, 1) console.log (dt) // Sun Jan 01 2017 00:00:00 GMT + 0100 

    Datum () je konstruktor za ustvarjanje novega Datum predmet. Različni konstruktorji za objekt različne argumente ustvariti enake vrste predmetnih primerov z različne lastnosti.

    Vsi vgrajeni predmeti v JavaScriptu se ne morejo prikazati kot primeri Datum. Obstajajo predmeti, ki ne prihaja z konstruktorjem: Math, JSON in Odražaj, vendar so še vedno običajni predmeti.

    Med vgrajenimi objekti, ki imajo konstruktorje, Simbol v slogu konstruktorja ni mogoče poklicati ustvari novo Simbol na primer. Lahko je samo kot funkcija ki vrne novo Simbol vrednost.

    Tudi med vgrajenimi objekti, ki imajo konstruktorje, ni treba, da bi vsi imeli svoje konstruktorje, da bi bili klicani s novo operaterja, da se ga prikaže. Funkcija, Array, Napaka, in RegExp lahko imenujemo tudi funkcije, brez uporabe novo ključno besedo, in ustvarili bodo primerek novega objekta.

    2. Odražaj predmet

    Podporne programerje morda že poznajo API-ji za razmislek. Razmišljanje je značilnost programskih jezikov pregledati in posodobiti nekatere osnovne subjekte, predmeti in razredi, med izvajanjem.

    V JavaScriptu ste lahko že izvedli nekaj operacij za razmislek Objekt. Ampak, a ustrezen API za refleksijo sčasoma tudi v JavaScriptu.

    The Odražaj Objekt ima nabor metod za ustvarite in posodobite primerke predmetov. The Odražaj predmet nima graditelja, zato ga ni mogoče ustvariti z novo operaterja in, podobno Math in JSON, to ni mogoče poklicati kot funkcijo prav tako.

    Vendar pa, Odražaj ima enakovredna. \ t novo operaterja: Reflect.construct () metodo.

     Reflect.construct (cilj, argumentiList [, newTarget]) 

    Oba cilj in neobvezno newTarget argumenti predmeti, ki imajo lastne konstruktorje, medtem argumentiNa seznam je Seznam argumentov , ki se posreduje konstruktorju cilj.

     var dt = Reflect.construct (datum, [2017, 0, 1]); console.log (dt); // Sun Jan 01 2017 00:00:00 GMT + 0100 

    Zgornja koda ima enak učinek kot instantiating Datum () uporabljati novo operaterja. Čeprav lahko še vedno uporabljate novo, Razmišljanje je Standard ECMAScript 6. Prav tako vam omogoča uporabite newTarget prepir, kar je še ena prednost pred novo operaterja.

    Vrednost newTarget's prototip (če smo natančni, je prototip. \ t newTargetKonstruktor uporabnika postane prototip na novo ustvarjenega primera.

    Prototip je lastnost predmeta, vrednost, ki je tudi predmet, ki nosi lastnosti prvotnega predmeta. Skratka, objekt dobi svoje člane iz prototipa.

    Tukaj si poglejmo primer:

     razred konstruktor () this.message = function () console.log ('sporočilo od A') razred B konstruktor ()  sporočilo () console.log ('sporočilo iz B')  data () console.log ('podatki iz B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // sporočilo iz konzole.log (obj.data ()); // podatki iz B console.log (obj instanceof B) // true 

    Z mimo B kot tretji argument za Reflect.construct (), prototipno vrednost. \ t obj predmet je biti enaka kot prototip Bkonstruktor (ki ima lastnosti. \ t sporočilo in podatkov).

    Tako, obj lahko dostopa do sporočilo in podatkov, prototipu. Ampak, od takrat obj uporablja A, ima tudi svoje sporočilo to prejeto od A.

    Čeprav obj je sestavljen kot matrika, je ne primer Array, ker je njegov prototip nastavljen na Objekt.

     obj = Reflect.construct (matrika, [1,2,3], objekt) console.log (obj) // Array [1, 2, 3] console.log (obj instanceof Array) // false 

    Reflect.construct () lahko uporabite, če želite ustvariti objekt več kot en načrt.

    3. Object.create () metodo

    Ustvarite lahko tudi nov navaden predmet s posebnim prototipom preko Object.create (). Tudi to se lahko zdi zelo podobno uporabi novo operater, vendar ni.

     Object.create (O [, lastnostiObjekt]) 

    The O argument je predmet, ki služi prototipu za nov predmet, ki bo ustvarjen. Neobvezno propertiesObject argument je a Seznam lastnosti morda želite dodati novemu objektu.

     razred konstruktor ()  sporočilo () console.log ('sporočilo od A') var obj = Object.create (novo A (), data: writeable: true, configurable: true, value: function () return 'data from obj') console.log (obj.message ()) // sporočilo iz konzole.log (obj.data ()) // podatki iz obj obj1 = Object.create ( novo A (), foo: writable: true, configurable: true, value: function () return 'foo iz obj1') console.log (obj1.message ()) // sporočilo iz konzole A. log (obj1.foo ()) // foo iz obj1 

    V obj predmet, je dodana lastnost podatkov, ko je v obj1, to je foo. Torej, kot vidite, lahko imamo lastnosti in metode dodane novemu objektu.

    To je super, ko želite ustvariti več predmetov iste vrste ampak z različne dodatne lastnosti ali metode. The Object.create () Sintaksa shrani težave pri kodiranju vseh ločeno.