Operator new

To tłumaczenie jest niepełne. Pomóż przetłumaczyć ten artykuł z języka angielskiego

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 objektu przez zdefiniowanego przez użytkownika przebiega w dwóch krokach:

  1. Zdefiniowanie typu objektu poprzez napisanie funkcji.
  2. Tworzenie jego instancji przy użyciu słowa kluczowego new.

Aby zdefiniować typ objektu, stwórz funkcję dla tego typu, która określa jego nazwę i właściwości. Objekt może mieć właściwość, której wartością jest on sam lub inny objekt. Spójrz na przykłady poniżej

Kiedy wykonywaniy jest kod new Foo(...), dzieją się następujące rzeczy:

  1. Tworzeny jest nowy objekt, dzidziczący po Foo.prototype.
  2. Wywoływany jest konstruktor Foo z określonymi argumentami, a kontekst this zostaje przypisany do nowo utworzonego objektu. new Foo jest równoznaczne z new Foo(), tzn. w przypadku gdy lista argumentów jst nieokreślona, Foo jest wywoływane bez argumentów.
  3. Objekt zwrócony przez konstruktor staje się wynikiem całego wyrażenia new. Jeżeli konstruktor nie zwraca objektu, objekt 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 objektu.)

Zawsze można dodać właściwość do wcześniej stworzonego objektu. 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 objekty. Aby dodać właściwość do wszystkich objektów tego samego typu, trzeba dodać tę właściwość do definicji typu objektu Car.

Można dodać wspólną właściwość do wcześniej zdefiniowanego typu objektu korzystając z właściwości Function.prototype. Definiuje ona wspólną właściwość dla wszystkich objektów tego typu, a nie charakterystyczną dla instancji typu objektu. Następujący kod dodaje właściwość color o wartości null do wszystkich objektów typu Car, a następnie znienia tę wartość tylko w objekcie 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 objektu i jego instancja

Przypuśćmy, że chcesz stworzyś typ objektu dla aut. Chcesz, żeby był nazwany car i by miał właściwości makemodel 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ć objekt 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ść objektów Car poprzez słowo kluczowe new. Na przykład:

var kenscar = new Car('Nissan', '300ZX', 1992);

Właściwość objeku, będąca innym objektem

Przypuśćmy, że definiujemy typ objektu Person jak poniżej:

function Person(name, age, sex) {
  this.name = name;
  this.age = age;
  this.sex = sex;
}

A następnie tworzymy dwa objekty 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 objekty, 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ą objekty: 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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
newChrome Full support 1Edge Full support 12Firefox Full support 1IE Full support 3Opera Full support 3Safari Full support 1WebView Android Full support 1Chrome Android Full support 18Firefox Android Full support 4Opera Android Full support 10.1Safari iOS Full support 1Samsung Internet Android Full support 1.0nodejs Full support 0.1.100

Legend

Full support  
Full support

Zobacz też