Početna » šifriranje » Objektno orijentirani JavaScript (OOJS) 3 načina stvaranja primjeraka objekata

    Objektno orijentirani JavaScript (OOJS) 3 načina stvaranja primjeraka objekata

    Kada je programski jezik sve o objektima, prva stvar koju moramo naučiti jest kako stvoriti objekte. Stvaranje objekata u JavaScriptu je prilično jednostavno: par kovrčavih proteza to će obaviti posao niti jedini način za stvaranje objekta niti jedini način koju ćete ikada trebati koristiti.

    U JavaScriptu su instance objekta izrađene iz ugrađenih objekata i nastaju kada se program izvodi. Na primjer, Datum je ugrađeni objekt koji nam daje informacije o datumima. Ako želimo prikazati trenutni datum na stranici, mi Potrebna je instanca izvođenja Datum koja sadrži podatke o trenutnom datumu.

    JavaScript nam također omogućuje definirati vlastite objekte koji mogu proizvesti vlastite instance objekta u runtime. U JavaScriptu, sve je objekt i svaki objekt ima konačni predak zvao Objekt. Poziva se stvaranje instance objekta utjelovljenje.

    1. novi operater

    Jedan od najčešćih i najpoznatijih metoda za stvaranje nove instance objekta je koristiti novi operater.

    Trebaš konstruktor napraviti novi rad operatera. Konstruktor je metoda objekta koja spaja a nova instanca tog objekta. Njegova osnovna sintaksa izgleda ovako:

     novi konstruktor () 

    Konstruktor može prihvatite argumente koji se može koristiti za promjenu ili dodavanje svojstava objektnoj instanci koju konstruira. Konstruktor ima isto ime kao objekt kojem pripada.

    Evo primjera kako stvoriti primjer Datum() objekt s novi ključne riječi:

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

    Datum() je konstruktor za stvaranje novog Datum objekt. Različiti konstruktori za objekt uzeti različite argumente stvoriti istu vrstu predmeta s objektom raznoliki atributi.

    Nisu svi ugrađeni objekti u JavaScriptu slični Datum. Postoje objekti koji nemojte dolaziti s konstruktorom: matematika, JSON i odraziti, ali oni su još uvijek obični objekti.

    Među ugrađenim objektima koji imaju konstruktore, Simbol ne može se pozvati u stilu konstruktora instancirati novo Simbol primjer. Može biti samo pozvan kao funkcija koji vraća novo Simbol vrijednost.

    Također, među ugrađenim objektima koji imaju konstruktore, ne moraju svi njihovi konstruktori biti pozvani sa novi operatora kako bi se instalirao. Funkcija, red, greška, i regularnim izrazom također se mogu pozvati kao funkcije, bez korištenja novi ključne riječi, a oni će instancirati i vratiti novu instancu objekta.

    2. odraziti objekt

    Programeri iz pozadine možda već znaju API-ji za promišljanje. Refleksija je značajka programskih jezika pregledati i ažurirati neke od osnovnih entiteta, kao što su objekti i klase, tijekom izvođenja.

    U JavaScriptu ste već mogli raditi neki operacije refleksije Objekt. Ali, a odgovarajući API za refleksiju naposljetku su također postojali u JavaScriptu.

    odraziti objekt ima skup metoda za stvarati i ažurirati instance objekta. odraziti objekt nema konstruktora, tako da ne može biti instancirana s novi operator, i, baš kao matematika i JSON, to ne može se pozvati kao funkcija ili.

    Međutim, odraziti ima ekvivalent novi operater: Reflect.construct () način.

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

    Oba cilj i opcionalno NEWTARGET argumenti predmeti koji imaju svoje konstruktore, dok argumentsList je popis argumenata koji se prosljeđuje konstruktoru cilj.

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

    Gornji kod ima isti učinak kao instanciranje Datum() koristiti novi operater. Iako još uvijek možete koristiti novi, Razmišljanje je ECMAScript 6 standard. Također vam omogućuje iskoristiti NEWTARGET argument, što je još jedna prednost u odnosu na novi operater.

    Vrijednost NEWTARGET's prototip (točnije, to je prototip. \ t NEWTARGETKonstruktor korisnika postaje prototip novostvorene instance.

    Prototip je svojstvo objekta, čija je vrijednost također objekt, nosi svojstva izvornog objekta. Ukratko, objekt dobiva svoje članove iz prototipa.

    Ovdje ćemo vidjeti primjer:

     klasa konstruktor () this.message = function () console.log ('poruka iz A') klasa B konstruktor ()  poruka () console.log ('poruka iz B')  data () console.log ('podaci iz B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // poruka iz konzole.log (obj.data ()); // podaci iz B console.log (obj instanceof B) // true 

    Prolazom B kao treći argument za Reflect.construct (), prototipnu vrijednost obj objekt je biti isti kao prototip Bkonstruktor (koji ima svojstva. \ t poruka i podaci).

    Tako, obj može pristupiti poruka i podaci, dostupan u prototipu. Ali od tada obj koristi se , ona također ima svoju poruka to primljeno od .

    Čak iako obj konstruiran je kao niz, to jest ne na primjer red, jer je njegov prototip postavljen na Objekt.

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

    Reflect.construct () može biti korisno kada želite stvoriti objekt s više od jednog nacrta.

    3. Object.create () način

    Također možete stvoriti novi obični objekt s određenim prototipom preko Object.create (). To se također može činiti vrlo sličnim korištenju novi operater, ali nije.

     Object.create (O [, svojstvaObjekt]) 

    O argument je objekt koji služi prototipu za novi objekt koji će biti izrađen. Opcionalno propertiesObject argument je popis svojstava možda želite dodati novom objektu.

     klasa konstruktor ()  poruka () console.log ('poruka od A') var obj = Object.create (novo A (), data: pisano: true, podesivo: true, value: function () return 'data from obj') console.log (obj.message ()) // poruka iz A console.log (obj.data ()) // podaci iz obj obj1 = Object.create ( new A (), foo: writable: true, podesivo: true, value: function () return 'foo iz obj1') console.log (obj1.message ()) // poruka iz A konzole. log (obj1.foo ()) // foo iz obj1 

    U obj objekt, dodano svojstvo podaci, dok u obj1, to je foo. Dakle, kao što vidite, možemo imati svojstva i metode dodane novom objektu.

    Ovo je sjajno kada želite stvoriti više objekata iste vrste ali s različita dodatna svojstva ili metode. Object.create () sintaksa štedi nevolje kodiranja svih njih zasebno.