tiendo a escribir objetos constructores de la siguiente manera:¿Cuál es la ventaja de usar este patrón de codificación de JavaScript para definir las funciones del constructor?
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
alert("Hello! My name is " + this.name + ".");
};
me he dado cuenta de algunas bibliotecas de JavaScript y marcos añadiendo un poco de código extra alrededor de ese modo:
var Person = (function() {
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
alert("Hello! My name is " + this.name + ".");
};
return Person;
})();
Yo sé lo que el función anónima autoejecutable hace y se utiliza para. Lo que no veo en este momento es qué ventaja o beneficio proporciona al definir un constructor y su prototipo.
editar # 1:
sé que el patrón de módulo y sus ventajas, y lo utilizan con bastante frecuencia en mi codificación. Mi error de comunicación no fue claro que mi primera muestra de código no se supone que esté en el alcance global. Siempre envuelvo todos mis archivos JavaScript externos en una función anónima autoejecutable para aplicar el alcance local en el código.
Por ejemplo:
;(function (window, undefined) {
var p = function (name) {
this.name;
};
p.prototype.greet = function() {
alert("Hello! My name is " + this.name + ".");
};
window.Person = window.Person || p;
})(window);
Lo que pasa es que he visto la técnica que se muestra en mi segundo ejemplo de código utilizado dentro una función tan anónimo.
Por ejemplo:
;(function (window, undefined) {
var p = (function() {
var q = function (name) {
this.name = name;
};
q.prototype.greet = function() {
alert("Hello! My name is " + this.name + ".");
};
return q;
})();
window.Person = window.Person || p;
})(window);
Aquí es donde yo estoy en una pérdida de la importancia de la técnica.
En este ejemplo específico, no hay diferencia. Creo que para una clase más complicada, podría importar, dependiendo de lo que el framework esté haciendo dentro del alcance extra. – Domenic
@Domenic - El tuyo responde a la respuesta que estaba esperando. Me pregunto si alguien podría elaborar más sobre esto. – natlee75