In Javascript ci sono alcune tecniche chiaramente importanti per creare e gestire classi / spazi dei nomi in JavaScript.
Sono curioso di sapere quali situazioni giustificano l'uso di una tecnica rispetto all'altra. Voglio sceglierne uno e restare con esso andando avanti.
Scrivo codice aziendale che viene gestito e condiviso tra più team e voglio sapere qual è la migliore pratica quando si scrive javascript gestibile?
Tendo a preferire le funzioni anonime auto-eseguite, tuttavia sono curioso di sapere quale sia il voto della comunità su queste tecniche.
Prototipo:
function obj()
{
}
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
Funzione anonima a chiusura automatica:
//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
}
Sento che dovrei menzionare che la funzione anonima auto-eseguita è il modello utilizzato dal team di jQuery.
Aggiornamento
Quando ho posto questa domanda non ho visto veramente l'importanza di ciò che stavo cercando di capire. Il vero problema a portata di mano è se usare o meno new per creare istanze dei tuoi oggetti o usare pattern che non richiedono costruttori / uso della newparola chiave.
Ho aggiunto la mia risposta, perché secondo me dovremmo fare uso di schemi che non usano la newparola chiave.
Per ulteriori informazioni, consultare la mia risposta.