Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Expresiones y operadores
  5. Operador new

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.

View in EnglishAlways switch to English

Operador new

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨julio de 2015⁩.

Eloperadornew permite a los desarrolladores crear una instancia de un tipo de objeto definido por el usuario o de uno de los tipos de objeto integrados que tiene un función constructora.

Pruébalo

function Car(make, model, year) {  this.make = make;  this.model = model;  this.year = year;}const car1 = new Car("Eagle", "Talon TSi", 1993);console.log(car1.make);// Expected output: "Eagle"

Sintaxis

new constructor[([arguments])]

Parámetros

constructor

Una clase o función que especifica el tipo de instancia del objeto.

arguments

Una lista de valores con los que se llamará alconstructor.

Descripción

La palabra clavenew hace lo siguiente:

  1. Crea un objeto JavaScript simple y en blanco;
  2. Vincula (establece el constructor de) este objeto a otro objeto;
  3. Pasa el objeto recién creado delPaso 1 como el contextothis;
  4. Devuelvethis si la función no devuelve un objeto.

La creación de un objeto definido por el usuario requiere dos pasos:

  1. Defina el tipo de objeto escribiendo una función.
  2. Crea una instancia del objeto connew.

Para definir un tipo de objeto, crea una función para el tipo de objeto que especifique su nombre y propiedades. Un objeto puede tener una propiedad que en sí misma es otro objeto. Ve los siguientes ejemplos.

Cuando se ejecuta el códigonew Foo(...), sucede lo siguiente:

  1. Se crea un nuevo objeto, heredado deFoo.prototype.
  2. La función constructoraFoo se llama con los argumentos especificados y conthis vinculado al objeto recién creado.new Foo es equivalente anew Foo(), es decir, si no se especifica una lista de argumentos,Foo se llama sin argumentos.
  3. El objeto (no nulo,false, 3.1415 u otros tipos primitivos) devuelto por la función constructora se convierte en el resultado de toda la expresiónnew. Si la función constructora no devuelve explícitamente un objeto, en su lugar se utiliza el objeto creado en el paso 1. (Normalmente, los constructores no devuelven un valor, pero pueden elegir hacerlo si quieren redefinir el proceso normal de creación de objetos).

Siempre puedes agregar una propiedad a un objeto definido previamente. Por ejemplo, la instruccióncar1.color = "black" agrega una propiedadcolor acar1 y le asigna un valor de "black". Sin embargo, esto no afecta a ningún otro objeto. Para agregar la nueva propiedad a todos los objetos del mismo tipo, debes agregar la propiedad a la definición del tipo de objetoCar.

Puedes agregar una propiedad compartida a un tipo de objeto definido previamente mediante la propiedadFunction.prototype. Esto define una propiedad que comparten 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 de color con el valor"color original" a todos los objetos de tipoCar, y luego redefine ese valor con la cadena "black" solo en la instanciacar1 del objeto. Para obtener más información, consultaprototype.

js
function Car() {}car1 = new Car();car2 = new Car();console.log(car1.color); // undefinedCar.prototype.color = "color original";console.log(car1.color); // 'color original'car1.color = "black";console.log(car1.color); // 'black'console.log(Object.getPrototypeOf(car1).color); // 'color original'console.log(Object.getPrototypeOf(car2).color); // 'color original'console.log(car1.color); // 'black'console.log(car2.color); // 'color original'

Nota:Si no escribiste el operadornew,la funciónconstructor se invocará como cualquier función normal,sin crear un objeto. En este caso, el valor dethis también es diferente.

Ejemplos

Tipo de objeto e instancia de objeto

Supongamos que deseas crear un tipo de objeto paracars. Quieres que este tipo de objeto se llameCar, y quieres que tenga propiedades para marca, modelo y año (make,model yyear en inglés respectivamente). Para ello, podrías escribir la siguiente función:

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

Ahora puedes crear un objeto llamadomyCar de la siguiente manera:

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

Esta declaración creamyCar y le asigna los valores especificados para sus propiedades. Entonces el valor demyCar.make es la cadena "Eagle",myCar.year es el entero 1993, y así sucesivamente.

Puedes crear cualquier número de objetoscar mediante llamadas anew. Por ejemplo:

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

Propiedad del objeto que en sí mismo es otro objeto

Supongamos que defines un objeto llamadoPerson de la siguiente manera:

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

Y luego creas una instancia de dos nuevos objetosPerson de la siguiente manera:

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

Luego, puedes reescribir la definición deCar para incluir una propiedad paraowner (propietario en español) que tome un objetoPerson, de la siguiente manera:

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

Para crear instancias de los nuevos objetos, utiliza lo siguiente:

js
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 al crear los nuevos objetos, las declaraciones anteriores pasan los objetosrand yken como parámetros para los propietarios. Para conocer el nombre del propietario decar2, puedes acceder a la siguiente propiedad:

js
car2.owner.name;

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# sec-new-operator

Compatibilidad con navegadores

Ve también

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp