Główna » Kodowanie » JavaScript obiektowy (OOJS) 3 sposoby tworzenia instancji obiektów

    JavaScript obiektowy (OOJS) 3 sposoby tworzenia instancji obiektów

    Kiedy jest język programowania wszystko o przedmiotach, pierwszą rzeczą, której musimy się nauczyć, jest jak tworzyć obiekty. Tworzenie obiektów w JavaScript jest dość proste: para nawiasów klamrowych to jednak zrobi ani jedyny sposób stworzyć obiekt ani jedyny sposób kiedykolwiek będziesz potrzebować.

    W JavaScript są to instancje obiektów utworzone z wbudowanych obiektów i powstanie, gdy program jest uruchomiony. Na przykład, Data to obiekt wbudowany, który daje nam informacje o datach. Jeśli chcemy pokazać aktualną datę na stronie, my potrzebujesz instancji środowiska wykonawczego Data która zawiera informacje o bieżącej dacie.

    JavaScript pozwala nam także zdefiniuj własne obiekty które mogą tworzyć własne instancje obiektów w czasie wykonywania. W JavaScript, wszystko jest przedmiotem a każdy obiekt ma ostateczny przodek nazywa Obiekt. Tworzenie instancji obiektu jest wywoływane instancja.

    1. The Nowy operator

    Jedną z najpopularniejszych i najbardziej znanych metod tworzenia nowej instancji obiektu jest metoda używając Nowy operator.

    Potrzebujesz konstruktor zrobić Nowy praca operatora. Konstruktor jest metodą obiektu, który łączy nowe wystąpienie tego obiektu. Jego podstawowa składnia wygląda tak:

     new constructor () 

    Konstruktor może akceptować argumenty które można wykorzystać do zmiany lub dodania właściwości do instancji obiektu, którą tworzy. Konstruktor ma tę samą nazwę jako obiekt, do którego należy.

    Oto przykład tworzenia wystąpienie Data() obiekt z Nowy słowo kluczowe:

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

    Data() jest konstruktorem do tworzenia nowego Data obiekt. Różne konstruktory dla obiektu przyjmuj różne argumenty aby utworzyć ten sam rodzaj instancji obiektu z różne atrybuty.

    Nie wszystkie wbudowane obiekty w JavaScript mogą być tworzone tak, jak Data. Są przedmioty, które nie przychodź z konstruktorem: Matematyka, JSON i Odzwierciedlić, ale nadal są zwykłymi przedmiotami.

    Wśród obiektów wbudowanych, które mają konstruktorów, Symbol nie można wywołać w stylu konstruktora utworzyć instancję nowego Symbol instancja. To może być tylko nazywany jako funkcja który zwraca nowy Symbol wartość.

    Ponadto wśród obiektów wbudowanych, które mają konstruktory, nie wszystkie wymagają, aby ich konstruktory były wywoływane za pomocą Nowy operator w celu utworzenia instancji. Funkcjonować, Szyk, Błąd, i RegExp można także nazywać funkcjami, bez użycia Nowy słowo kluczowe, a wystąpią instancje i zwrócą nową instancję obiektu.

    2. The Odzwierciedlić obiekt

    Programiści zaplecza mogą być już zaznajomieni Interfejsy API do refleksji. Odbicie jest cechą języków programowania sprawdzić i zaktualizować niektóre podstawowe jednostki, takie jak obiekty i klasy, W czasie wykonywania.

    W JavaScript możesz już wykonać trochę operacje odbicia za pomocą Obiekt. Ale odpowiednie API Reflection ostatecznie powstał również w JavaScript.

    The Odzwierciedlić obiekt ma zestaw metod do tworzyć i aktualizować instancje obiektów. The Odzwierciedlić obiekt nie ma konstruktora, więc nie można go utworzyć za pomocą Nowy operator i, podobnie jak Matematyka i JSON, to nie można wywołać jako funkcji zarówno.

    jednak, Odzwierciedlić ma odpowiednik Nowy operator: the Reflect.construct () metoda.

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

    Oboje cel i opcjonalne newTarget są argumenty obiekty mające własnych konstruktorów, podczas argumentsList jest lista argumentów do przekazania konstruktorowi cel.

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

    Powyższy kod ma taki sam efekt jako instancja Data() używając Nowy operator. Chociaż nadal możesz używać Nowy, Odbicie jest Standard ECMAScript 6. Pozwala także na skorzystać z newTarget argument, co jest kolejną przewagą nad Nowy operator.

    Wartość newTargetprototyp (dokładniej, jest to prototyp newTargetkonstruktor) staje się prototypem nowo utworzonej instancji.

    Prototyp to właściwość obiektu, której wartość jest także przedmiot, przenoszenie właściwości oryginalnego obiektu. W skrócie, obiekt pobiera członków z prototypu.

    Oto przykład:

     class A constructor () this.message = function () console.log ('message from A') class B constructor ()  message () console.log ('wiadomość od B')  data () console.log ('data from B') obj = Reflect.construct (A, [], B) console.log (obj.message ()); // wiadomość z A console.log (obj.data ()); // dane z B console.log (obj instanceof B) // true 

    Mijając b jako trzeci argument do Reflect.construct (), wartość prototypu obj obiekt jest być takim samym jako prototyp bkonstruktor (który ma właściwości wiadomość i dane).

    A zatem, obj może uzyskać dostęp do wiadomość i dane, dostępny w swoim prototypie. Lecz odkąd obj jest wykonany przy użyciu ZA, ma też swój własny wiadomość to otrzymane od ZA.

    Nawet jeśli obj jest skonstruowany jako tablica nie wystąpienie Szyk, ponieważ jego prototyp jest ustawiony na Obiekt.

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

    Reflect.construct () może być przydatny, gdy chcesz utworzyć obiekt używając więcej niż jednego planu.

    3. The Object.create () metoda

    Możesz także utworzyć nowy zwykły obiekt z określonym prototypem przez Object.create (). To również może wydawać się bardzo podobne do używania Nowy operator, ale tak nie jest.

     Object.create (O [, propertiesObject]) 

    The O argument jest obiektem, który służy prototypowi dla nowego obiektu, który zostanie utworzony. Opcjonalne propertiesObject argument jest lista właściwości możesz dodać do nowego obiektu.

     class A constructor ()  message () console.log ('message from A') var obj = Object.create (new A (), data: writeable: true, konfigurowalny: true, value: function () return 'data from obj') console.log (obj.message ()) // wiadomość z A console.log (obj.data ()) // data from obj obj1 = Object.create ( new A (), foo: zapisywalny: true, konfigurowalny: true, wartość: function () return 'foo z obj1') console.log (obj1.message ()) // komunikat z konsoli. log (obj1.foo ()) // foo z obj1 

    w obj obiekt, dodana właściwość to dane, podczas gdy obj1, jego bla. Więc, jak widzisz, możemy mieć właściwości i metody dodane do nowego obiektu.

    To wspaniałe, gdy chcesz tworzyć wiele obiektów tego samego rodzaju ale z różne dodatkowe właściwości lub metody. The Object.create () składnia oszczędza kłopotów z kodowaniem ich osobno.