Kotisivu » Coding » Objektiorientoitu JavaScript (OOJS) 3 tapaa luoda esineitä

    Objektiorientoitu JavaScript (OOJS) 3 tapaa luoda esineitä

    Kun ohjelmointikieli on kaikki esineistä, ensimmäinen asia, joka meidän on opittava, on miten luoda kohteita. Objektien luominen JavaScriptissä on melko helppoa: pari kihara suljin tekee työn kuitenkin ei ainoa tapa luoda objektin eikä ainoa tapa sinun täytyy koskaan käyttää.

    JavaScriptissa objektikohteet ovat luotu sisäänrakennetuista kohteista ja tulevat esiin, kun ohjelma on käynnissä. Esimerkiksi, Treffi on sisäänrakennettu objekti, joka antaa meille tietoja päivämääristä. Jos haluamme näyttää nykyisen päivämäärän sivulla, me tarvitsemme runtime-esimerkin Treffi joka sisältää tiedot nykyisestä päivämäärästä.

    JavaScript mahdollistaa myös määritellä omia esineitä jotka voivat tuottaa omia esineesi esiintymisiä ajonaikaisesti. JavaScriptissä, kaikki on esine ja jokaisella esineellä on lopullinen esi-isä olla nimeltään Esine. Objektin esiintymän luomista kutsutaan instanssien.

    1. The Uusi operaattori

    Yksi yleisimmistä ja tunnetuimmista menetelmistä uuden objektin esimerkin luomiseksi on käyttämällä Uusi operaattori.

    Sinä tarvitset rakentaja tehdä Uusi operaattorin työtä. Rakentaja on objektin menetelmä, joka kokoaa yhteen uuden objektin. Sen perustavanlaatuinen syntaksi näyttää tältä:

     uusi rakentaja () 

    Rakentaja voi hyväksy argumentteja jota voidaan käyttää muuttamaan tai lisäämään ominaisuuksia, joita se rakentaa. Rakentaja on sama nimi objektina, johon se kuuluu.

    Tässä on esimerkki siitä, miten voit luoda esimerkiksi Treffi() esine kanssa Uusi avainsana:

     dt = uusi Päivämäärä (2017, 0, 1) console.log (dt) // su 01.1.2017 00:00:00 GMT + 0100 

    Treffi() on rakentaja luoda uusi Treffi esine. Erilaiset objektin rakentajat ottaa erilaisia ​​argumentteja luoda samantyyppisiä objektitapauksia erilaisia ​​ominaisuuksia.

    Kaikkia JavaScriptin sisäänrakennettuja objekteja ei voi tuoda esiin Treffi. On olemassa esineitä älä tule rakentajan kanssa: Matematiikka, JSON ja Heijastaa, mutta he ovat edelleen tavallisia esineitä.

    Sisäänrakennettujen objektien joukossa, joissa on rakentaja (t), Symboli ei voida kutsua rakentajan tyyliin uudistaa Symboli ilmentymä. Se voi olla vain kutsutaan funktioksi joka palauttaa uuden Symboli arvo.

    Myöskään sisäänrakennettujen objektien joukossa, joissa on rakentaja (t), kaikki eivät tarvitse niiden rakentajia kutsumaan Uusi operaattori, jotta se voidaan tuoda esiin. Toimia, ryhmä, Virhe, ja regexp voidaan myös kutsua funktioiksi, käyttämättä Uusi avainsana, ja ne päivittävät ja palauttavat uuden objektin.

    2. Heijastaa esine

    Backend-ohjelmoijat saattavat olla jo tuttuja Reflection API: t. Heijastus on ohjelmointikielen ominaisuus tarkastaa ja päivittää joitakin perusyksiköitä, kuten esineet ja luokat, ajon aikana.

    JavaScriptissä voit jo suorittaa jonkin verran heijastustoiminnot Esine. Mutta a asianmukainen Reflection API lopulta tuli myös JavaScript.

    Heijastaa objektilla on joukko menetelmiä luo ja päivitä objektitapauksia. Heijastaa esine ei ole rakentajaa, joten sitä ei voi tuoda esiin Uusi operaattori, ja aivan kuten Matematiikka ja JSON, se ei voida kutsua funktioksi jompikumpi.

    kuitenkin, Heijastaa on vastaava Uusi operaattori: Reflect.construct () menetelmä.

     Reflect.construct (kohde, argumentitList [, newTarget]) 

    Molemmat kohde ja valinnainen newTarget väitteet ovat esineitä, joilla on omat rakentajansa, sillä aikaa argumentsList on luettelo argumenteista toimitettava kohde.

     var dt = Reflect.construct (Päivämäärä, [2017, 0, 1]); console.log (dt); // Sun 01.1.2017 00:00:00 GMT + 0100 

    Yllä oleva koodi sillä on sama vaikutus kuten instantiating Treffi() käyttämällä Uusi operaattori. Vaikka voit silti käyttää Uusi, Heijastus on ECMAScript 6 -standardi. Sen avulla voit myös hyödyntää newTarget Perustelu, mikä on toinen etu Uusi operaattori.

    Arvo newTargetprototyyppi (tarkalleen ottaen se on prototyyppi. \ t newTargetrakentaja) siitä tulee vasta luodun instanssin prototyyppi.

    Prototyyppi on objektin ominaisuus, jonka arvo on myös esine, alkuperäisen kohteen ominaisuuksia. Lyhyesti sanottuna esine saa sen jäsenet prototyypistään.

    Täällä katsotaan esimerkki:

     class A constructor () this.message = toiminto () console.log ('viesti A') luokka B rakennuttaja ()  viesti () console.log ('viesti B: stä')  data () console.log ('tiedot B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // viesti A console.log (obj.data ()); // tiedot B console.logista (obj instanceof B) // true 

    Menemällä B kolmas argumentti Reflect.construct (), prototyyppiarvo obj objekti on tehty samaksi kuin prototyyppi B's konstruktori (jolla on ominaisuudet) viesti ja data).

    Täten, obj voi käyttää viesti ja data, saatavilla sen prototyypissä. Mutta sen jälkeen obj on tehty käyttämällä , sillä on myös oma viesti se vastaanotettu .

    Vaikkakin obj on rakennettu massiiviksi, se on ei esimerkiksi ryhmä, koska sen prototyyppi on asetettu Esine.

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

    Reflect.construct () voi olla hyödyllinen, kun haluat luoda objektin käyttämällä useampaa kuin yhtä suunnitelmaa.

    3. Object.create () menetelmä

    Voit myös luoda a uusi tavallinen objekti, jolla on tietty prototyyppi kautta Object.create (). Myös tämä saattaa tuntua hyvin samanlaiselta kuin Uusi operaattori, mutta se ei ole.

     Object.create (O [, propertiesObject]) 

    O argumentti on objekti palvelee prototyyppiä uudelle luodulle objektille. Valinnainen propertiesObject väite on a luettelo ominaisuuksista haluat ehkä lisätä uuden objektin.

     class A constructor ()  -viesti () console.log ('viesti A') var obj = Object.create (uusi A (), data: kirjoitettava: totta, konfiguroitavissa: totta, arvo: function () return 'data from obj') console.log (obj.message ()) // viesti A console.log (obj.data ()) // tiedot obj obj1 = Object.create ( uusi A (), foo: kirjoitettava: totta, konfiguroitavissa: totta, arvo: toiminto () return 'foo kohteesta obj1') console.log (obj1.message ()) // viesti A-konsolista. loki (obj1.foo ()) // foo kohteesta obj1 

    Vuonna obj objekti, lisätty ominaisuus on data, kun olet obj1, sen foo. Niin, kuten näette, voimme olla uuteen kohteeseen lisätyt ominaisuudet ja menetelmät.

    Tämä on hienoa, kun haluat luoda useita samanlaisia ​​esineitä mutta eri lisäominaisuuksia tai -menetelmiä. Object.create () syntaksi säästää ongelman koodaamalla ne kaikki erikseen.