Construtores de objetos JavaScript
Exemplo
function Person(first, last, age, eye) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eye;
}
É considerado uma boa prática nomear funções de construtor com uma primeira letra maiúscula.
Tipos de objeto (plantas) (classes)
Os exemplos dos capítulos anteriores são limitados. Eles só criam objetos únicos.
Às vezes precisamos de um " plano " para criar muitos objetos do mesmo "tipo".
A maneira de criar um "tipo de objeto" é usar uma função construtora de objeto .
No exemplo acima, function Person()
é uma função construtora de objetos.
Objetos do mesmo tipo são criados chamando a função construtora com a new
palavra-chave:
const myFather = new Person("John", "Doe", 50, "blue");
const myMother = new Person("Sally", "Rally", 48, "green");
A palavra- chave esta
Em JavaScript, a coisa chamada this
é o objeto que "possui" o código.
O valor de this
, quando usado em um objeto, é o próprio objeto.
Em uma função construtora this
não tem valor. É um substituto para o novo objeto. O valor de this
se tornará o novo objeto quando um novo objeto for criado.
Observe que this
não é uma variável. É uma palavra-chave. Você não pode alterar o valor de this
.
Adicionando uma propriedade a um objeto
Adicionar uma nova propriedade a um objeto existente é fácil:
Exemplo
myFather.nationality = "English";
A propriedade será adicionada ao myFather. Não para minha mãe. (Não para objetos de outra pessoa).
Adicionando um método a um objeto
Adicionar um novo método a um objeto existente é fácil:
Exemplo
myFather.name = function () {
return this.firstName + " " + this.lastName;
};
O método será adicionado ao myFather. Não para minha mãe. (Não para objetos de outra pessoa).
Adicionando uma propriedade a um construtor
Você não pode adicionar uma nova propriedade a um construtor de objeto da mesma forma que adiciona uma nova propriedade a um objeto existente:
Exemplo
Person.nationality = "English";
Para adicionar uma nova propriedade a um construtor, você deve adicioná-la à função construtora:
Exemplo
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.nationality = "English";
}
Dessa forma, as propriedades do objeto podem ter valores padrão.
Adicionando um método a um construtor
Sua função construtora também pode definir métodos:
Exemplo
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
this.name = function() {
return this.firstName + " " + this.lastName;
};
}
Você não pode adicionar um novo método a um construtor de objeto da mesma forma que adiciona um novo método a um objeto existente.
A adição de métodos a um construtor de objetos deve ser feita dentro da função construtora:
Exemplo
function Person(firstName, lastName, age, eyeColor) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.eyeColor = eyeColor;
this.changeName = function (name) {
this.lastName = name;
};
}
A função changeName() atribui o valor de name à propriedade lastName da pessoa.
Agora você pode tentar:
myMother.changeName("Doe");
JavaScript sabe de qual pessoa você está falando "substituindo" isso por myMother .
Construtores JavaScript integrados
JavaScript tem construtores embutidos para objetos nativos:
new String() // A new String object
new Number() // A new Number object
new Boolean() // A new Boolean object
new Object() // A new Object object
new Array() // A new Array object
new RegExp() // A new RegExp object
new Function() // A new Function object
new Date() // A new Date object
O Math()
objeto não está na lista. Math
é um objeto global. A new
palavra-chave não pode ser usada em
Math
.
Você sabia?
Como você pode ver acima, o JavaScript tem versões de objeto dos tipos de dados primitivos String
, Number
e Boolean
. Mas não há razão para criar objetos complexos. Os valores primitivos são muito mais rápidos:
Use literais de string ""
em vez de new String()
.
Use literais numéricos 50
em vez de new Number()
.
Use literais booleanos true / false
em vez de new Boolean()
.
Use literais de objeto {}
em vez de new Object()
.
Use literais de matriz []
em vez de new Array()
.
Use literais padrão /()/
em vez de new RegExp()
.
Use expressões de função () {}
em vez de new Function()
.
Exemplo
let x1 = ""; // new primitive string
let x2 = 0; // new primitive number
let x3 = false; // new primitive boolean
const x4 = {}; // new Object object
const x5 = []; // new Array object
const x6 = /()/ // new RegExp object
const x7 = function(){}; // new function
Objetos de String
Normalmente, as strings são criadas como primitivas: firstName = "John"
Mas strings também podem ser criadas como objetos usando a new
palavra-chave:
firstName = new String("John")
Aprenda porque strings não devem ser criadas como objeto no capítulo JS Strings .
Objetos numéricos
Normalmente, os números são criados como primitivos: x = 30
Mas os números também podem ser criados como objetos usando a new
palavra-chave:
x = new
Number(30)
Aprenda porque os números não devem ser criados como objeto no capítulo Números JS .
Objetos Booleanos
Normalmente, os booleanos são criados como primitivos: x =
false
Mas booleanos também podem ser criados como objetos usando a new
palavra-chave:
x = new Boolean(false)
Aprenda porque booleanos não devem ser criados como objeto no capítulo JS Booleans .