Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

new

Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

El  operador new crea una instancia de un objeto definido por el usuario o uno de los tipos de objetos incorporados que tienen una función de construcción.

Sintaxis

new constructor[([argumentos])]

Parametros

constructor
Una función que especifica el tipo de la instancia del objeto.
argumentos
Una lista de valores que serán llamados con el constructor.

Descripción

Crear un objeto definido por el usuario requiere dos pasos:

  1. Definir el tipo de objeto escribiendo una función.
  2. Crear una instancia del objeto con new.

Definir un tipo de objeto, crear una función para el tipo de objeto que especifique su nombre y sus propiedades. Un objeto puede tener una propiedad que sea en sí misma otro objeto. Ver los ejemplos siguientes,

Cuando el código new Foo(...) es ejecutado, las siguientes cosas pasan:

  1. Un nuevo objeto es creado, este hereda de  Foo.prototype.
  2. La función de construcción (constructor) es llamada con los argumentos especificados, y con el objeto this atado al objeto recien creado. new Foo es equivalente a new Foo(), i.e. si no hay una lista de argumentos especificada, Foo es llamada sin argumentos.
  3. El objeto regresado por la función de construcción (constructor) se convierte en el resultado la expresión new. Si la función de construcción no regresa explicitamente un objeto, el objeto creado en el paso 1 será regresado en su lugar. (Normalmente las funciones de construcción no regresan un valor, pero pueden elegirlo si quieren sobreescribir el proceso de creación de objetos normal.)

Siempre puedes agregar una propiedad a un objeto definido previamente. Por ejemplo, la sentencia car1.color = "black" agrega la propiedad color a car1, y asigna su valor a "black". Sin embargo, esto no afecta a cualquier otro objeto. Para agregar una propiedad nueva a todos los objeto del mismo tipo, debes agregar la propiedad a la definición del objeto tipo Car.

Puedes agregar una propiedad compartida a un tipo de objeto definido previamente utilizando la propiedad Function.prototype. Esto define una propiedad que es compartida por todos los objetos creados con esa función, en lugar de solo una instancia del tipo de objeto. El siguiente código agrega una propiedad color con el valor null a todos los objetos de tipo car, y luego sobreescribe el valor con la cadena "black" solo en la instancia del objeto car1. Para más informllación, puedes ver 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

Ejemplos

Tipo de objeto instancia de objeto

Supongamos que quieres crear un tipo de objeto para carros. Quieres que este tipo de objeto se llame car, y quieres que tenga las propiedades fabricante, modelo y anio. Para hacer esto, tendrías que escribir la siguiente función.

function Carro(fabricante, model, year) {
  this.fabricante = fabricante;
  this.modelo = modelo;
  this.anio = anio;
}

Ahora puedes crear un objeto llamado mycar de la siguiente manera:

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

Esta declaración crea mycar y le asigna los valores especificados a sus propiedades. Luego el valor mycar.fabricante es la cadena "Eagle", mycar.anio es el entero 1993, y así.

Puedes crear cualquier numero de objetos car haciendo llamadas a new. Por ejemplo:

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

Propiedad de objeto que es otro objeto

Supongamos que defines un objeto llamdo  person:

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

Y luego creamos dos instancions nuevos del objeto new person:

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

Luego reescribes la definición de car para incluir una propiedad dueño (owner) que toma un objeto person:

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

Para crear nuevas instancias del objeto car haces lo siguiente:

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

En lugar de pasar una cadena literal o un valor entero cuando se crean los nuevos objetos, las declaraciones de abajo pasan los objetos rand y ken como los parametros de los dueños. Para encontrar el nombre del dueño de car2, tienes que acceder a la siguiente propiedad:

car2.owner.name

Especificaciones

Especificación Estado Comentario
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.

Compatibilidad entre navegadores

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

See also

Etiquetas y colaboradores del documento

 Colaboradores en esta página: edsonjmv, fscholz, SphinxKnight, teoli, jansanchez
 Última actualización por: edsonjmv,