Hjemmeside » Coding » Objektorienteret JavaScript (OOJS) 3 måder at oprette objekttilfælde på

    Objektorienteret JavaScript (OOJS) 3 måder at oprette objekttilfælde på

    Når et programmeringssprog er alt om objekter, Det første vi skal lære er hvordan man opretter objekter. Oprettelse af objekter i JavaScript er ret let: et par krøllede seler vil gøre jobbet, dog det er hverken den eneste måde at oprette et objekt heller ikke den eneste måde du bliver nogensinde nødt til at bruge.

    I JavaScript er objektet forekomster oprettet fra indbyggede objekter og kommer til eksistens, når programmet kører. For eksempel, Dato er et indbygget objekt, der giver os oplysninger om datoer. Hvis vi vil vise den aktuelle dato på en side, vi har brug for en runtime forekomst af Dato der bærer oplysninger om den aktuelle dato.

    JavaScript tillader os også at definer vores egne objekter der kan producere deres egne objektfelter i runtime. I JavaScript, alt er et objekt og hvert objekt har en ultimative forfader hedder Objekt. Oprettelsen af ​​et objekt eksempel kaldes instantiering.

    1. Den ny operatør

    En af de mest almindelige og velkendte metoder til at oprette et nyt objekt eksempel er ved bruger ny operatør.

    Du har brug for en konstruktør at lave ny operatør arbejde. En konstruktør er en metode til et objekt, der sætter sammen en ny forekomst af objektet. Dens grundlæggende syntaks ser ud som dette:

     ny konstruktør () 

    En konstruktør kan acceptere argumenter som kan bruges til at ændre eller tilføje egenskaber til objektets instans, som det konstruerer. Konstruktøren har samme navn som objektet det tilhører.

    Her er et eksempel på, hvordan man opretter en eksempel på Dato() objekt med ny søgeord:

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

    Dato() er konstruktøren at skabe en ny Dato objekt. Forskellige konstruktorer til en genstand tage forskellige argumenter at skabe de samme slags objekter med varierede attributter.

    Ikke alle indbyggede objekter i JavaScript kan være instantiated som Dato. Der er objekter der kom ikke med en konstruktør: Math, JSON og Afspejle, men de er stadig almindelige genstande.

    Blandt de indbyggede objekter, der har konstruktør (er), Symbol kan ikke kaldes i konstruktørstilen at instantiere en ny Symbol instans. Det kan kun være kaldet som en funktion som returnerer en ny Symbol værdi.

    Også blandt de indbyggede objekter, der har konstruktør (er), behøver ikke alle deres konstruktører at blive kaldt med ny operatør for at blive instantiated. Fungere, Array, Fejl, og RegExp kan også kaldes som funktioner, uden at bruge ny søgeord, og de vil instantiere og returnere en ny objekt instans.

    2. Den Afspejle objekt

    Backend programmører kan allerede være bekendt med Refleksions-API'er. Refleksion er en funktion af programmeringssprog til inspicere og opdatere nogle af de grundlæggende enheder, såsom objekter og klasser, på kørselstidspunktet.

    I JavaScript kan du allerede udføre nogle refleksionsoperationer ved hjælp af Objekt. Men a korrekt refleksions-API til sidst kom til at eksistere i JavaScript også.

    Det Afspejle objekt har et sæt metoder til oprette og opdatere objektet forekomster. Det Afspejle objekt har ingen konstruktør, så det kan ikke instantieres med ny operatør, og ligesom Math og JSON, det kan ikke kaldes som en funktion enten.

    Imidlertid, Afspejle har en svarende til ny operatør: det Reflect.construct () metode.

     Reflect.construct (target, argumentsList [, newTarget]) 

    Både mål og det valgfrie NEWTARGET argumenter er genstande der har deres egne konstruktører, mens argumentsList er en liste over argumenter at blive overført til konstruktøren af mål.

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

    Koden ovenfor har samme virkning som instantiating Dato() bruger ny operatør. Selvom du stadig kan bruge ny, Refleksion er en ECMAScript 6 standard. Det giver dig også mulighed for gøre brug af NEWTARGET argument, hvilket er en anden fordel i forhold til ny operatør.

    Værdien af NEWTARGETprototype (for at være præcis, det er prototypen af NEWTARGETkonstruktør) bliver prototypen af ​​den nyoprettede instans.

    En prototype er ejendom af et objekt, hvis værdi er også et objekt, bære egenskaberne af det oprindelige objekt. Kort sagt, et objekt får sine medlemmer fra sin prototype.

    Lad os se et eksempel her:

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

    Ved at passere B som det tredje argument til Reflect.construct (), prototypeværdien af obj objekt er gjort for at være ens som prototype af BKonstruktør (som har egenskaberne besked og data).

    Dermed, obj kan få adgang til besked og data, tilgængelig på sin prototype. Men siden obj er lavet ved hjælp af EN, den har også sin egen besked det modtaget af EN.

    Selv om obj er konstrueret som et array, det er ikke en forekomst af Array, fordi dens prototype er indstillet til Objekt.

     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 nyttigt, når du vil oprette et objekt bruger mere end en blueprint.

    3. Den Object.create () metode

    Du kan også oprette en nyt almindeligt objekt med en specifik prototype via Object.create (). Dette kan også synes meget ligner at bruge ny operatør, men det er det ikke.

     Object.create (O [, propertiesObject]) 

    Det O argument er et objekt, der tjener prototypen for det nye objekt, der vil blive oprettet. Den valgfri propertiesObject argumentet er a liste over egenskaber du vil måske tilføje til det nye objekt.

     klasse A constructor ()  message ) console.log ('besked fra A') var obj = Object.create (ny A (), data: skrivbar: true, konfigurerbar: true, value: funktion () return'data fra obj ')) console.log (obj.message ()) // besked fra A console.log (obj.data ()) // data fra obj obj1 = Object.create ( ny A (), foo: skrivbar: true, konfigurerbar: true, value: function () return foo fra obj1 ' console.log (obj1.message ()) // besked fra en konsol. log (obj1.foo ()) // foo fra obj1 

    I obj objekt, den tilføjede egenskab er data, mens i obj1, det er foo. Så som vi ser, kan vi have egenskaber og metoder tilføjet til et nyt objekt.

    Dette er fantastisk, når du vil oprette flere genstande af samme art men med forskellige supplerende egenskaber eller metoder. Det Object.create () syntax sparer besværet med at kode dem alle for sig.