--- title: operatore new slug: Web/JavaScript/Reference/Operators/new tags: - Espressioni di sinistra - JavaScript - Operatore translation_of: Web/JavaScript/Reference/Operators/new ---
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.
new constructor[([arguments])]
constructor
arguments
constructor
sarà chiamato.Creare un oggetto definito dall'utente richiede due step:
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:
Foo.prototype
.this
legato all'oggetto appena creato. new Foo
è identica a new Foo()
, ovvero se nessun argomento è specificato, Foo viene chiamato senza argumenti.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(); car2 = new Car(); console.log(car1.color); // undefined Car.prototype.color = "original color"; console.log(car1.color); // original color car1.color = 'black'; console.log(car1.color); // black console.log(car1.__proto__.color) //original color console.log(car2.__proto__.color) //original color console.log(car1.color) // black console.log(car2.color) // original color
Se non hai usato l'operatore new
, la funzione constructor verrà invocata come una qualunque altra funzione, senza creare un nuovo Object. in questo caaso, anche il valore di this
è diverso.
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 Car
vuoi utilizzando new
. Per esempio:
var kenscar = new Car("Nissan", "300ZX", 1992);
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 | Status | Commento |
---|---|---|
{{SpecName('ESDraft', '#sec-new-operator', 'The new Operator')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES6', '#sec-new-operator', 'The new Operator')}} | {{Spec2('ES6')}} | |
{{SpecName('ES5.1', '#sec-11.2.2', 'The new Operator')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES3', '#sec-11.2.2', 'The new Operator')}} | {{Spec2('ES3')}} | |
{{SpecName('ES1', '#sec-11.2.2', 'The new Operator')}} | {{Spec2('ES1')}} | Initial definition. Implemented in JavaScript 1.0. |
{{Compat("javascript.operators.new")}}