En Javascript hay algunas técnicas claramente destacadas para crear y administrar clases / espacios de nombres en javascript.
Tengo curiosidad por saber qué situaciones justifican el uso de una técnica frente a la otra. Quiero elegir uno y seguir adelante.
Escribo código empresarial que se mantiene y se comparte entre varios equipos, y quiero saber cuál es la mejor práctica al escribir JavaScript mantenible.
Tiendo a preferir las funciones anónimas de ejecución automática, sin embargo, tengo curiosidad por saber qué vota la comunidad sobre estas técnicas.
Prototipo :
function obj()
{
}
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
Función anónima de cierre automático:
//Self-Executing Anonymous Function
(function( skillet, $, undefined ) {
//Private Property
var isHot = true;
//Public Property
skillet.ingredient = "Bacon Strips";
//Public Method
skillet.fry = function() {
var oliveOil;
addItem( "\t\n Butter \n\t" );
addItem( oliveOil );
console.log( "Frying " + skillet.ingredient );
};
//Private Method
function addItem( item ) {
if ( item !== undefined ) {
console.log( "Adding " + $.trim(item) );
}
}
}( window.skillet = window.skillet || {}, jQuery ));
//Public Properties
console.log( skillet.ingredient ); //Bacon Strips
//Public Methods
skillet.fry(); //Adding Butter & Fraying Bacon Strips
//Adding a Public Property
skillet.quantity = "12"; console.log( skillet.quantity ); //12
//Adding New Functionality to the Skillet
(function( skillet, $, undefined ) {
//Private Property
var amountOfGrease = "1 Cup";
//Public Method
skillet.toString = function() {
console.log( skillet.quantity + " " +
skillet.ingredient + " & " +
amountOfGrease + " of Grease" );
console.log( isHot ? "Hot" : "Cold" );
};
}( window.skillet = window.skillet || {}, jQuery ));
//end of skillet definition
try {
//12 Bacon Strips & 1 Cup of Grease
skillet.toString(); //Throws Exception
} catch( e ) {
console.log( e.message ); //isHot is not defined
}
Siento que debo mencionar que la función anónima autoejecutable es el patrón utilizado por el equipo de jQuery.
Actualización
Cuando hice esta pregunta, realmente no vi la importancia de lo que estaba tratando de entender. El verdadero problema en cuestión es si usar o no nuevas para crear instancias de sus objetos o usar patrones que no requieren constructores / uso de la newpalabra clave.
Agregué mi propia respuesta, porque en mi opinión deberíamos usar patrones que no usan la newpalabra clave.
Para obtener más información, consulte mi respuesta.