operatore new

Questa traduzione è incompleta. Collabora alla traduzione di questo articolo dall’originale in lingua inglese.

L' operatore new crea un'istanza di un tipo di oggetto definito dall'utente o di uno dei tipi di oggetto nativi che ha una funzione costruttore.

Sintassi

new constructor[([arguments])]

Parametri

constructor
Una funzione che specifica il tipo dell'oggetto istanziato.
arguments
Una lista di valori con i quali constructor sarà chiamato.

Descrizione

Creare un oggetto definito dall'utente richiede due step:

  1. Definire il tipo di oggetto scrivendo una funzione.
  2. Creare un'istanza dell'oggetto con new.

Per definire un tipo di oggetto, crea una funzione per il tipo di oggetto che specifichi il suo nome e le sue proprietà. Un oggetto può avere una proprietà che è se stessa un oggetto. Vedi l'esempio sotto.

Quando il codice new Foo(...) viene eseguito, ecco cosa accade:

  1. Un nuovo oggetto viene creato ed eredita da Foo.prototype.
  2. La funzione costruttore Foo viene chiamata con gli argomenti specificati e con this legato all'oggetto appena creato. new Foo è identica a new Foo(), ovvero se nessun argomento è specificato, Foo viene chiamato senza argumenti.
  3. L'oggetto ritornato dalla funzione costruttore diventa il risultato dell'intera espressione new. Se la funzione costruttore non ritorna esplicitamente un oggetto, viene invece usato l'oggetto creato nello step 1. (Normalmente i costruttori non ritornano un valore, ma possono scegliere di farlo se vogliono sovrascrivere il processo di creazione di un normale oggetto).

Puoi sempre aggiungere una proprietà all'oggetto che hai creato precedentemente. Per esempio, la dichiarazione car1.color = "black" aggiunge una proprietà  color a car1, e gli assegna il valore di "black". Tuttavia, questo non influenza nessun altro oggetto. Per aggiungere una nuova proprietà a tutti gli oggetti dello stesso tipo, devi aggiungere la proprietà alla definizione del tipo di oggetto, in questo caso Car.

Puoi aggiungere una proprietà condivisa ad un tipo di oggetto che hai definito prima usando la proprietà Function.prototype.

Questo definisce una proprietà che è condivisa da tutti gli oggetti creati con quella funzione, piuttosto che solo da un'istanza di quel tipo di oggetto. Il seguente codice aggiunge una proprietà con il valore null a tutti gli oggetti di tipo car, e poi sovrascrive quel valore con la stringa "black" solo nell'oggetto istanza car1. Per altre informazioni, vedi 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

Esempi

Tipo di oggetto e oggetto istanza

Metti caso di volere creare un tipo di oggetto per le macchine. Vuoi che questo tipo di oggetto si chiami car, e vuoi che abbia queste proprietà: make (brand, marca), model (modello) e year (anno). Per fare questo, potresti scrivere la seguente funzione:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

Adesso puoi creare un oggetto chiamato myCar in questo modo:

var mycar = new Car("Eagle", "Talon TSi", 1993);

Questa dichiarazione crea myCar e gli assegna i valori specificati per le sue proprietà. Poi il valore di mycar.make è "Eagle", mycar.year è il numero intero 1993, e così via.

Puoi creare quanti oggetti cars vuoi utilizzando new. Per esempio:

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

Proprietà dell'oggetto che è se stesso un oggetto

Supponi di definire un oggetto person in questo modo:

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

E poi istanzi due nuove oggetti person in questo modo:

var rand = new Person("Rand McNally", 33, "M");
var ken = new Person("Ken Jones", 39, "M");

Poi puoi riscrivere la definizione di car per includere una proprietà owner (proprietario) che accetta un oggetto persona, ecco come:

function Car(make, model, year, owner) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.owner = owner;
}

Per istanziare i nuovi oggetti, poi fai così:

var car1 = new Car("Eagle", "Talon TSi", 1993, rand);
var car2 = new Car("Nissan", "300ZX", 1992, ken);

Invece di passare una stringa letterale o un valore intero quando crei i nuovi oggetti, le dichiarazioni sopra passano gli oggetti rand e ken come parametri per i proprietari. Per cercare il nome del proprietario (owner) in car2, puoi accedere alla seguente proprietà:

car2.owner.name

Specifiche

Specifiche Status Commento
ECMAScript 2017 Draft (ECMA-262)
The definition of 'The new Operator' in that specification.
Draft  
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 Initial definition. Implemented in JavaScript 1.0.

Compatibilità browser

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Supporto base (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Supporto base (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

Vedi anche

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: Giuseppe37
 Ultima modifica di: Giuseppe37,