Koduleht » Kodeerimine » Objekt-orienteeritud JavaScript (OOJS) 3 võimalust objektide esinemise loomiseks

    Objekt-orienteeritud JavaScript (OOJS) 3 võimalust objektide esinemise loomiseks

    Kui programmeerimiskeel on kõik objektidest, esimene asi, mida peame õppima, on kuidas luua objekte. Objektide loomine JavaScriptis on üsna lihtne: paar lokkis traksid teeb seda siiski mitte ainus viis objekti loomiseks ega ainus viis peate kunagi kasutama.

    JavaScriptis on objektid loodud sisseehitatud objektidest ja tulevad eksisteerima, kui programm töötab. Näiteks, Kuupäev on sisseehitatud objekt, mis annab meile teavet kuupäevade kohta. Kui me tahame näha praegust kuupäeva lehel, siis me vajavad käitust Kuupäev mis kannab teavet praeguse kuupäeva kohta.

    JavaScript võimaldab meil ka määratleda meie enda objektid mis suudavad käivitada oma objektide eksemplare. JavaScriptis, kõik on objekt ja igal objektil on ülim esivanem kutsus Objekt. Objekti eksemplari loomist nimetatakse esitlus.

    1. uus operaator

    Üks kõige tavalisemaid ja tuntud meetodeid uue objekti näite loomiseks on kasutades uus operaator.

    Sa pead a konstruktor teha uus operaatori töö. Konstruktor on objekti objekt, mis paneb kokku a selle objekti uut eksemplari. Selle põhiline süntaks näeb välja selline:

     uus ehitaja () 

    Ehitaja saab nõustuda argumentidega mida saab kasutada omaduste muutmiseks või lisamiseks selle konstrueeritavale objektiastmele. Ehitaja on sama nimi kui objekt, kuhu see kuulub.

    Siin on näide selle kohta, kuidas luua näiteks Kuupäev () objekti koos uus märksõna:

     dt = uus kuupäev (2017, 0, 1) console.log (dt) // pühapäev 01.01.2017 00:00:00 GMT + 0100 

    Kuupäev () on ehitaja, et luua uus Kuupäev objekti. Erinevad konstruktorid objektile võtma erinevaid argumente sama tüüpi objektide esinemise loomiseks erinevad atribuudid.

    Mitte kõiki JavaScripti sisseehitatud objekte ei saa näiteks sellisteks muuta Kuupäev. On objekte, mida ärge tulge konstruktoriga: Matemaatika, JSON ja Mõtle, kuid nad on ikka tavalised objektid.

    Sisseehitatud objektide hulgas, millel on konstruktor (id), Sümbol ei saa konstruktori stiilis kutsuda uue värskendamiseks Sümbol näiteks. See võib olla ainult seda nimetatakse funktsiooniks mis annab uue Sümbol väärtus.

    Samuti ei vaja ehitajatega ehitatud objektide hulgas kõiki oma konstruktoreid uus operaatorit, et seda saaks kasutada. Funktsioon, Array, Viga, ja RegExp võib nimetada ka funktsioone, ilma uus võtmesõnaga, ja nad pakuvad uue objekti näiteks.

    2. Mõtle objekti

    Taustaprogrammeerijad võivad olla juba tuttavad Reflection API-d. Peegeldus on programmeerimiskeele funktsioon kontrollima ja ajakohastama mõned põhiüksused, nagu objektid ja klassid, käitusajal.

    JavaScriptis saate juba täita mõned peegeldusoperatsioone kasutades Objekt. Aga a õige peegelduse API lõpuks tuli ka JavaScript.

    The Mõtle objektil on mitu meetodit objektide eksemplaride loomine ja uuendamine. The Mõtle objekti ei ole konstruktorit, nii et seda ei saa kohelda uus operaator, ja nagu ka Matemaatika ja JSON, seda seda ei saa nimetada funktsiooniks ka.

    Kuid, Mõtle on samaväärne uus operaator: Reflect.construct () meetod.

     Reflect.construct (sihtmärk, argumendidList [, newTarget]) 

    Mõlemad sihtmärk ja valikuline uus eesmärk argumendid on objektid, millel on oma konstruktorid, samal ajal argumendidList on argumentide loetelu tuleb edasi anda sihtmärk.

     var dt = Reflect.construct (kuupäev, [2017, 0, 1]); console.log (dt); // Püh 01.01.2017 00:00:00 GMT + 0100 

    Ülalolev kood on sama mõju nagu instantiating Kuupäev () kasutades uus operaator. Kuigi saate siiski kasutada uus, Peegeldus on ECMAScript 6 standard. See võimaldab teil ka kasutada uus eesmärk argument, mis on veel üks eelis uus operaator.

    Väärtus uus eesmärkprototüüp (täpne, see on. \ t uus eesmärkehitaja) muutub uue loodud prototüübi prototüüpiks.

    Prototüüp on Objekti vara, mille väärtus on ka objekt, algse objekti omadused. Lühidalt öeldes saab objekt oma liikmed oma prototüübist.

    Siin näeme näiteks:

     klass A constructor () this.message = funktsioon () console.log ('sõnum A'st) klass B constructor ()  sõnum () console.log (' sõnum B'st)  data () console.log ('andmed B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // sõnum A console.log (obj.data ()); // andmed B console.logist (obj instanceof B) // true 

    Läbi B kolmanda argumendina Reflect.construct (), prototüübi väärtus obj objekt on olema sama kui prototüüp Bkonstruktor (millel on omadused) sõnum ja andmeid).

    Seega, obj pääseb juurde sõnum ja andmeid, selle prototüübist. Aga sellest ajast obj on tehtud kasutades A, tal on ka oma sõnum seda saadud A.

    Kuigi obj on ehitatud massiivina, see on mitte näiteks Array, sest selle prototüüp on seatud Objekt.

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

    Reflect.construct () võib olla kasulik, kui soovite objekti luua kasutades rohkem kui üht plaani.

    3. Object.create () meetod

    Samuti saate luua a uus tavaline objekt, millel on konkreetne prototüüp kaudu Object.create (). Ka see võib tunduda väga sarnane uus operaator, kuid see pole.

     Object.create (O [, propertiesObject]) 

    The O argument on objekt teenib prototüüpi uue loodud objekti jaoks. Vabatahtlik omadusedObject argument on a omaduste loetelu võid lisada uue objekti juurde.

     klass A constructor ()  message () console.log ('sõnum A'st) var obj = Object.create (uus A (), data: kirjutatav: tõene, konfigureeritav: tõene, väärtus: function () return 'data from obj') console.log (obj.message ()) // sõnum A console.log (obj.data ()) // andmed obj obj1 = Object.create ( uus A (), foo: kirjutatav: tõene, konfigureeritav: tõene, väärtus: funktsioon () return 'foo obj1') console.log (obj1.message ()) // sõnum A-konsoolilt. log (obj1.foo ()) // foo obj1-st 

    In obj objekt, lisatav vara on andmeid, ajal obj1, see on foo. Niisiis, nagu näete, võib meil olla uude objekti lisatud omadused ja meetodid.

    See on suurepärane, kui soovite luua mitut sama liiki objekti kuid koos erinevad täiendavad omadused või meetodid. The Object.create () süntaks salvestab kõik nende kodeerimise probleemid.