Sono nuovo di JavaScript e sto cercando di capire come utilizzare gli spazi dei nomi per evitare conflitti di denominazione. Finora, i due metodi più diffusi che ho trovato per la creazione di spazi dei nomi sono questi:Qual è la differenza tra questi metodi di namespace?
Metodo 1:
var MYAPPLICATION = {
calculateVat: function (base) {
return base * 1.21;
},
product: function (price) {
this.price = price;
this.getPrice = function(){
return this.price;
};
},
doCalculations: function() {
var p = new MYAPPLICATION.product(100);
alert(this.calculateVat(p.getPrice()));
}
}
Metodo 2:
var DED = (function() {
var private_var;
function private_method()
{
// do stuff here
}
return {
method_1 : function()
{
// do stuff here
},
method_2 : function()
{
// do stuff here
}
};
})();
è la differenza che il secondo metodo consente di avere metodi e variabili privati, poiché solo ciò che è all'interno dell'oggetto restituito sarà accessibile a livello globale? Quale di questi metodi è il migliore (o c'è un modo migliore)?
La possibilità di avere funzioni e variabili che non si desidera esporre al chiamante è davvero il vantaggio. E imo, è un enorme vantaggio. – techfoobar
* La differenza è che il secondo metodo consente di avere metodi e variabili privati, poiché solo ciò che è all'interno dell'oggetto che viene restituito sarà accessibile a livello globale? *: Sì. Per questo motivo, lo chiamerei "migliore". – Matt
Prima di tutto non è il namespacing che stai chiedendo, relativo alla struttura scoping/codice. Secondo non c'è il meglio :) Vorrei raccomandare di leggere abit [sui modelli javascript] (http://addyosmani.com/resources/essentialjsdesignpatterns/book/) per comprendere i vantaggi di ciascuna soluzione. – Ota