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 new
parola chiave.
Ho aggiunto la mia risposta, perché secondo me dovremmo fare uso di schemi che non usano la new
parola chiave.
Per ulteriori informazioni, consultare la mia risposta.