En realidad, hay varias formas de crear objetos en JavaScript. Cuando solo desea crear un objeto, no hay beneficio de crear objetos " basados en el constructor " utilizando el operador " nuevo ". Es lo mismo que crear un objeto usando la sintaxis " literal del objeto ". Pero los objetos " basados en constructores " creados con el operador " nuevo " tienen un uso increíble cuando piensas en " herencia prototípica ". No puede mantener la cadena de herencia con objetos creados con sintaxis literal. Pero puede crear una función de constructor , adjuntar propiedades y métodos a su prototipo."operador, devolverá un objeto que tendrá acceso a todos los métodos y propiedades adjuntas con el prototipo de esa función constructora.
Aquí hay un ejemplo de cómo crear un objeto usando la función de constructor (vea la explicación del código en la 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();
Ahora, puede crear tantos objetos como desee instanciando la función de construcción Persona y todos ellos heredarán el nombre completo () de ella.
Nota: " esta " palabra clave se referirá a un objeto vacío dentro de una función de constructor y cada vez que cree un nuevo objeto desde Persona usando el operador " nuevo ", devolverá automáticamente un objeto que contiene todas las propiedades y métodos adjuntos con la palabra clave " este " . Y estos objetos seguramente heredarán los métodos y propiedades asociados con el prototipo de la función de constructor Persona (que es la principal ventaja de este enfoque).
Por cierto, si desea obtener la misma funcionalidad con la sintaxis " literal de objeto ", tendría que crear el nombre completo () en todos los objetos como se muestra a continuación:
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 último, si ahora pregunta por qué debería usar el enfoque de función de constructor en lugar del enfoque literal de objeto :
*** La herencia prototípica permite una simple cadena de herencia que puede ser inmensamente útil y poderosa.
*** Ahorra memoria al heredar métodos comunes y propiedades definidas en el prototipo de funciones de constructor. De lo contrario, tendría que copiarlos una y otra vez en todos los objetos.
Espero que esto tenga sentido.
a = new Object
,a = new Object()
,a = {}
, literal es mucho más simple y algunas pruebas que corrió hace un tiempo dicen que es más rápido, más nuevos compiladores pueden haber causado mi declaración es falsa. Lo mismo se aplica a las matrices literales