Hjemmeside » Coding » Objektorientert JavaScript (OOJS) 3 måter å opprette objekter på

    Objektorientert JavaScript (OOJS) 3 måter å opprette objekter på

    Når et programmeringsspråk er alt om objekter, Det første vi trenger å lære er hvordan lage objekter. Å lage objekter i JavaScript er ganske enkelt: et par krøllete braces vil gjøre jobben, det er det verken den eneste måten å opprette et objekt heller ikke den eneste måten du trenger å bruke.

    I JavaScript er objektet forekomster laget av innebygde objekter og kommer til eksistens når programmet kjører. For eksempel, Dato er et innebygd objekt som gir oss informasjon om datoer. Hvis vi vil vise gjeldende dato på en side, vi trenger en runtime forekomst av Dato som bærer informasjonen om gjeldende dato.

    JavaScript tillater oss også å definer våre egne objekter som kan produsere sine egne objektfelter i kjøretid. I JavaScript, alt er et objekt og hvert objekt har en ultimate forfader kalt Gjenstand. Opprettelsen av en objekt-forekomst kalles oppretting.

    1. Den ny operatør

    En av de vanligste og mest kjente metodene for å opprette en ny objektinstans er at bruker ny operatør.

    Du trenger en konstruktør å lage ny operatør arbeid. En konstruktør er en metode for et objekt som setter sammen a ny forekomst av objektet. Den grunnleggende syntaksen ser slik ut:

     ny konstruktør () 

    En konstruktør kan godta argumenter som kan brukes til å endre eller legge til egenskaper til objektet instansen det konstruerer. Konstruktøren har samme navn som objektet den tilhører.

    Her er et eksempel på hvordan du oppretter en forekomst av Dato() gjenstand med ny søkeord:

     dt = ny dato (2017, 0, 1) console.log (dt) // søndag jan 01 2017 00:00:00 GMT + 0100 

    Dato() er konstruktøren å lage en ny Dato gjenstand. Ulike konstruktører for en gjenstand ta forskjellige argumenter å opprette samme type objekter med varierte attributter.

    Ikke alle innebygde objekter i JavaScript kan bli instantiated som Dato. Det er objekter som Ikke kom med en konstruktør: Matte, JSON og Reflektere, men de er fortsatt vanlige gjenstander.

    Blant de innebygde objekter som har konstruktør (er), symbol kan ikke kalles i konstruktørstilen å instansere en ny symbol forekomst. Det kan bare være kalt som en funksjon som returnerer en ny symbol verdi.

    Også, blant de innebygde objekter som har konstruktør (er), trenger ikke alle sine konstruktører å bli kalt med ny operatør for å bli instantiated. Funksjon, Array, Feil, og RegExp kan også kalles som funksjoner, uten å bruke ny søkeord, og de vil instantiere og returnere en ny objekteksempel.

    2. Den Reflektere gjenstand

    Backend programmerere kan allerede være kjent med Refleksjon APIer. Refleksjon er en funksjon av programmeringsspråk til inspisere og oppdatere noen av de grunnleggende enhetene, for eksempel objekter og klasser, på kjøretid.

    I JavaScript kan du allerede utføre noen refleksjon operasjoner bruker Gjenstand. Men, a riktig refleksjon API til slutt kom til å eksistere i JavaScript også.

    De Reflektere objektet har et sett med metoder til opprett og oppdatere objektinstanser. De Reflektere gjenstand har ingen konstruktør, så det kan ikke bli instantiated med ny operatør, og akkurat som Matte og JSON, den kan ikke kalles som en funksjon enten.

    derimot, Reflektere har en ekvivalent av ny operatør: den Reflect.construct () metode.

     Reflect.construct (mål, argumenterListe [, newTarget]) 

    Begge mål og valgfritt NEWTARGET Argumenter er gjenstander som har sine egne konstruktører, samtidig som argumentsList er en liste over argumenter å bli sendt til konstruktøren av mål.

     var dt = Reflect.construct (Dato, [2017, 0, 1]); console.log (dt); // søndag 01 jan 2017 00:00:00 GMT + 0100 

    Koden ovenfor har samme effekt som instantiating Dato() bruker ny operatør. Selv om du fortsatt kan bruke ny, Refleksjon er en ECMAScript 6 standard. Det lar deg også gjøre bruk av NEWTARGET argument, som er en annen fordel i forhold til ny operatør.

    Verdien av NEWTARGETprototype (for å være nøyaktig, det er prototypen til NEWTARGETkonstruktør) blir prototypen av den nyopprettede forekomsten.

    En prototype er eiendom av et objekt, verdien av denne er også et objekt, bære egenskapene til det opprinnelige objektet. Kort sagt, et objekt får sine medlemmer fra prototypen.

    Her ser vi et eksempel:

     klasse A constructor () this.message = function () console.log ('melding fra A') klasse B constructor ()  melding () console.log ('melding fra B')  data () console.log ('data fra B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // melding fra en console.log (obj.data ()); // data fra B console.log (obj instanceof B) // true 

    Ved å passere B som det tredje argumentet til Reflect.construct (), prototypen verdien av obj objektet er laget for å være det samme som prototype av BKonstruktør (som har egenskapene budskap og data).

    Og dermed, obj kan få tilgang til budskap og data, tilgjengelig på prototypen. Men siden obj er laget ved hjelp av EN, den har også sin egen budskap den mottat fra EN.

    Selv om obj er konstruert som en matrise, det er det ikke en forekomst av Array, fordi prototypen er satt til Gjenstand.

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

    Reflect.construct () kan være nyttig når du vil opprette et objekt bruker mer enn ett blåkopi.

    3. Den Object.create () metode

    Du kan også opprette en nytt vanlig objekt med en bestemt prototype via Object.create (). Dette kan også virke svært likt å bruke ny operatør, men det er det ikke.

     Object.create (O [, propertiesObject]) 

    De O argument er et objekt som serverer prototypen for det nye objektet som skal opprettes. Den valgfrie propertiesObject argumentet er a liste over eiendommer Du vil kanskje legge til det nye objektet.

     klasse A konstruktør ()  melding () console.log ('melding fra A') var obj = Object.create (nytt A (), data: skrivbar: sann, konfigurerbar: sann, verdi: funksjon () (retur) data fra obj ')) console.log (obj.message ()) // melding fra A console.log (obj.data ()) // data fra obj obj1 = Object.create ( ny A (), foo: skrivbar: sant, konfigurerbar: sann, verdi: funksjon () retur 'foo fra obj1')) console.log (obj1.message ()) // melding fra En konsoll. logg (obj1.foo ()) // foo fra obj1 

    I obj objekt, den ekstra egenskapen er data, mens i obj1, det er foo. Så, som du ser, kan vi ha egenskaper og metoder lagt til i et nytt objekt.

    Dette er flott når du vil opprette flere objekter av samme type men med forskjellige tilleggsegenskaper eller metoder. De Object.create () syntaks sparer bryet med å kode dem alle separat.