Na verdade, existem várias maneiras de criar objetos em JavaScript. Quando você deseja apenas criar um objeto, não há benefício em criar objetos " baseados em construtores " usando o operador " novo ". É o mesmo que criar um objeto usando a sintaxe " literal de objeto ". Mas os objetos " baseados em construtores " criados com o operador " novo " são de uso incrível quando você pensa em " herança prototípica ". Você não pode manter a cadeia de herança com objetos criados com sintaxe literal. Mas você pode criar uma função de construtor , anexar propriedades e métodos ao seu protótipo."operador, ele retornará um objeto que terá acesso a todos os métodos e propriedades anexados ao protótipo dessa função construtora.
Aqui está um exemplo de criação de um objeto usando a função construtora (consulte a explicação do código na parte inferior):
function Person(firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Person.prototype.fullname = function() {
console.log(this.firstname + ' ' + this.lastname);
}
var zubaer = new Person('Zubaer', 'Ahammed');
var john = new Person('John', 'Doe');
zubaer.fullname();
john.fullname();
Agora, você pode criar quantos objetos quiser, instanciando a função de construção Person e todos eles herdarão fullname () dela.
Nota: a palavra-chave " this " se refere a um objeto vazio dentro de uma função construtora e sempre que você cria um novo objeto a partir de Person usando o operador " new ", ele retorna automaticamente um objeto que contém todas as propriedades e métodos anexados à palavra-chave " this " . E esses objetos certamente herdarão os métodos e propriedades anexados ao protótipo da função construtora Person (que é a principal vantagem dessa abordagem).
A propósito, se você deseja obter a mesma funcionalidade com sintaxe " literal de objeto ", teria que criar fullname () em todos os objetos, como abaixo:
var zubaer = {
firstname: 'Zubaer',
lastname: 'Ahammed',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
var john= {
firstname: 'John',
lastname: 'Doe',
fullname: function() {
console.log(this.firstname + ' ' + this.lastname);
}
};
zubaer.fullname();
john.fullname();
Por fim, se você agora perguntar por que devo usar a abordagem da função construtora em vez da abordagem literal do objeto :
*** A herança prototípica permite uma cadeia simples de herança que pode ser imensamente útil e poderosa.
*** Economiza memória ao herdar métodos e propriedades comuns definidos no protótipo de funções do construtor. Caso contrário, você teria que copiá-los repetidamente em todos os objetos.
Espero que isto faça sentido.
a = new Object
,a = new Object()
,a = {}
, literal é muito mais simples e alguns testes eu corri um tempo atrás dizem que é mais rápido, compiladores mais recentes podem ter causado a minha declaração é falsa. O mesmo se aplica a matrizes literais