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ść newTarget
prototyp (dokładniej, jest to prototyp newTarget
konstruktor) 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 b
konstruktor (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.