Operator new
Operator new tworzy nową instancję typu obiektu zdenifiowanego przez użytkownika lub instancję wbudowanego typu obiektu, który posiada konstruktor.
Składnia
new constructor[([arguments])]
Parametry
constructor- Klasa bądź funkcja, która definiuje typ obiektu instancji.
arguments- Lista wartości z którymi zostanie wywołany
constructor.
Opis
Tworzenie obiektu przez zdefiniowanego przez użytkownika przebiega w dwóch krokach:
- Zdefiniowanie typu obiektu poprzez napisanie funkcji.
- Tworzenie jego instancji przy użyciu słowa kluczowego
new.
Aby zdefiniować typ obiektu, stwórz funkcję dla tego typu, która określa jego nazwę i właściwości. Obiekt może mieć właściwość, której wartością jest on sam lub inny obiekt. Spójrz na przykłady poniżej
Kiedy wykonywaniy jest kod new Foo(...), dzieją się następujące rzeczy:
- Tworzeny jest nowy obiekt, dzidziczący po
Foo.prototype. - Wywoływany jest konstruktor
Fooz określonymi argumentami, a kontekstthiszostaje przypisany do nowo utworzonego obiektu.new Foojest równoznaczne znewFoo(), tzn. w przypadku gdy lista argumentów jst nieokreślona,Foojest wywoływane bez argumentów. - Obiekt zwrócony przez konstruktor staje się wynikiem całego wyrażenia
new. Jeżeli konstruktor nie zwraca obiektu, obiekt stworzony w kroku 1 jest używany zamiast niego. (Zwykle kontruktory nie zwracają żadnej wartości, ale mogą tak czynić jeśli chcą nadpiać normalny proces tworzenia obiektu.)
Zawsze można dodać właściwość do wcześniej stworzonego obiektu. Na przykład, wyrażenie car1.color = "black" dodaje właściwość color do car1, przypisuje mu wartość "black". Jednakże, nie wpływa to w żaden sposób na inne obiekty. Aby dodać właściwość do wszystkich obiektów tego samego typu, trzeba dodać tę właściwość do definicji typu obiektu Car.
Można dodać wspólną właściwość do wcześniej zdefiniowanego typu obiektu korzystając z właściwości Function.prototype. Definiuje ona wspólną właściwość dla wszystkich obiektów tego typu, a nie charakterystyczną dla instancji typu obiektu. Następujący kod dodaje właściwość color o wartości null do wszystkich obiektów typu Car, a następnie znienia tę wartość tylko w obiekcie car1 na łańcuch "black" . Po więcej informacji, zobacz prototype.
function Car() {}
car1 = new Car();
console.log(car1.color); // undefined
Car.prototype.color = null;
console.log(car1.color); // null
car1.color = 'black';
console.log(car1.color); // black
Przykłady
Typ obiektu i jego instancja
Przypuśćmy, że chcesz stworzyś typ obiektu dla aut. Chcesz, żeby był nazwany car i by miał właściwości make, model i year. Żeby to osiągnąć należy stworzyć następującą funkcję:
function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
}
Teraz można stworzyć obiekt mycar:
var mycar = new Car('Eagle', 'Talon TSi', 1993);
Powyższy kod deklaruje zmienną mycar i przypisuje do niej określone właściwości. Wartość mycar.make to łańcuch "Eagle", mycar.year to liczba 1993 itd.
Można stworzyć nieograniczoną ilość obiektów Car poprzez słowo kluczowe new. Na przykład:
var kenscar = new Car('Nissan', '300ZX', 1992);
Właściwość obiektu, będąca innym obiektem
Przypuśćmy, że definiujemy typ obiektu Person jak poniżej:
function Person(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
A następnie tworzymy dwa obiekty Person:
var rand = new Person('Rand McNally', 33, 'M');
var ken = new Person('Ken Jones', 39, 'M');
Teraz możemy przepisać definicję Car tak, by zawierała właściwość owner, która przyjmuje obiekt:
function Car(make, model, year, owner) {
this.make = make;
this.model = model;
this.year = year;
this.owner = owner;
}
Aby utworzyć nowe obiekty, należy napisać:
var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
var car2 = new Car('Nissan', '300ZX', 1992, ken);
Zamiast przekazywania wartości liczbowych lub łańcuchów znaków, w powyższym przykładzie przekazywane są obiekty: rand oraz ken. Aby uzyskać imię właściciela samochodu car2, należy napisać:
car2.owner.name
Specyfikacje
| Specifikacja | Status | Komentarz |
|---|---|---|
| ECMAScript (ECMA-262) The definition of 'The new Operator' in that specification. |
Living Standard | |
| ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'The new Operator' in that specification. |
Standard | |
| ECMAScript 5.1 (ECMA-262) The definition of 'The new Operator' in that specification. |
Standard | |
| ECMAScript 3rd Edition (ECMA-262) The definition of 'The new Operator' in that specification. |
Standard | |
| ECMAScript 1st Edition (ECMA-262) The definition of 'The new Operator' in that specification. |
Standard | Wstępna definicja. Zaimpelementowano w JavaScript 1.0. |
Wsparcie przeglądarek
BCD tables only load in the browser