Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
new operator
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julho de 2015.
Ooperadornew cria uma instancia de um tipo de objeto definido pelo usuário ou de um dos tipos nativos (built-in) que possuem uma função construtora.
In this article
Experimente
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"Sintaxe
new construtor[([argumentos])]
Parametros
construtorUma função que especifica o tipo da instância do objeto.
argumentosUma lista de valores com os quais o construtor será chamado.
Descrição
Criar um objeto definido pelo usuário requer dois passos:
- Definir o tipo de objeto através da escrita de uma função.
- Criar uma instancia do objeto utilizando
new.
Para definir um tipo de objeto, crie uma função para o tipo de objetivo que especifica seu nome e propriedades. Um objeto pode ter uma propriedade que é um outro objeto. Veja os exemplos abaixo:
Quando o códigonew Foo(...) é executado, acontece o seguinte::
- Um novo objeto é criado, herdando de
Foo.prototype. - A função construtoraF
ooé chamado com os argumentos especificados, e comthisvinculado ao novo objeto criado.new Fooé equivalente anew Foo(), ou seja, se nenhuma lista de argumentos for especificada,Foo é chamado sem argumentos. - O objeto retornado pela função construtora é o resultado de toda expressão
new. Se a função construtora não retornar um objeto explicitamente, o objeto criado no passo 1 é então usado. (Normalmente construtores não retornam um valor, mas eles podem escolher fazê-lo se eles quiserem sobrescrever o processo normal de criação de objeto.)
Você sempre pode adicionar uma propriedade à um objeto definido previamente. Por exemplo,carro1.cor = "preta" adiciona a propriedadecor emcarro1, e atribui a ela o valor de "preta". Entretanto, isso não afeta os outros objetos. Para adicionar a nova propriedade a todos objetos do mesmo tipo, você deve adicionar a propriedade à definição do tipo de objetoCarro.
Você pode adicionar uma propriedade compartilhada à um tipo de objeto definido anteriormente através do uso da propriedadeFunction.prototype. Isso define uma propriedade que é compartilhada por todos os objetos criados com essa função, ao invés de apenas uma instancia do tipo de objeto. O código a seguir adiciona uma propriedade cor com valornull à todos objetos do tipocarro, e então sobrescreve aquele valor com a string "preta" somente no objeto de instanciacarro1. Para mais informações vejaprototype.
function Carro() {}carro1 = new Carro();console.log(carro1.cor); // undefinedCarro.prototype.cor = null;console.log(carro1.cor); // nullcarro1.cor = "preta";console.log(carro1.cor); // pretaExemplos
>Tipo de objeto e instância de objeto
Suponha que você quer criar um tipo de objeto para carros. Você quer que esse tipo de objeto se chamecarro, e quer que ele tenha propriedade para fabricante, modelo e ano. Para fazer isso, você escreveria a função a seguir:
function Carro(fabricante, modelo, ano) { this.fabricante = fabricante; this.modelo = modelo; this.ano = ano;}Agora você pode criar um objeto chamadomeucarro como a seguir:
var meucarro = new Carro("Eagle", "Talon TSi", 1993);Essa declaração criameucarro e atribui a ele os valores especificados as suas propriedades. Então o valor demeucarro.fabricante é a string "Eagle",meucarro.ano é o inteiro 1993, e assim sucessivamente.
Você pode criar qualquer numero de objetoscarro através de chamadas anew. Por exemplo:
var carrodoken = new Carro("Nissan", "300ZX", 1992);Propriedade do objeto que é outro objeto
Suponha que você defina um objeto chamadopessoa como a seguir:
function Pessoa(nome, idade, sexo) { this.nome = nome; this.idade = idade; this.sexo = sexo;}E então instancia dois novos objetospessoa como a seguir:
var rand = new Pessoa("Rand McNally", 33, "M");var ken = new Pessoa("Ken Jones", 39, "M");Então você pode reescrever a definição decarro para incluir uma propriedade dono que aceita um objeto pessoa, como a seguir:
function Carro(fabricante, modelo, ano, dono) { this.fabricante = fabricante; this.modelo = modelo; this.ano = ano; this.dono = dono;}Para instanciar os novos objetos, você então usa o seguinte:
var carro1 = new Carro("Eagle", "Talon TSi", 1993, rand);var carro2 = new Carro("Nissan", "300ZX", 1992, ken);Ao invés de passar uma string ou valor inteiro quando criar os novos objetos, as definições acima passam objetosrand eken como os parâmetros para os donos. Para descobrir o nome do dono docarro2, você pode acessar a seguinte propriedade:
carro2.dono.nome;Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-new-operator> |