tendo a scrivere costruttori degli oggetti nel modo seguente:Qual è il vantaggio dell'utilizzo di questo modello di codifica JavaScript per definire le funzioni del costruttore?
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
alert("Hello! My name is " + this.name + ".");
};
ho notato un paio di librerie JavaScript e framework aggiungendo un po 'di codice in più in giro che in questo modo:
var Person = (function() {
function Person(name) {
this.name = name;
}
Person.prototype.greet = function() {
alert("Hello! My name is " + this.name + ".");
};
return Person;
})();
So quello che il la funzione anonima self-executing fa e viene usata per. Quello che non riesco a vedere al momento è quale vantaggio o vantaggio ciò offre quando si definisce un costruttore e il suo prototipo.
EDIT # 1:
so che il modello del modulo e dei suoi vantaggi, e utilizzarlo abbastanza spesso nel mio codice. Il mio errore nella comunicazione non era chiaro sul fatto che il mio primo esempio di codice non dovrebbe essere nella portata globale. Comprendo sempre tutti i miei file JavaScript esterni in una funzione anonima autoeseguibile per applicare l'ambito locale sul codice.
Per esempio:
;(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);
Il fatto è che ho visto la tecnica mostrata nel mio secondo esempio di codice utilizzato all'interno una funzione così anonima.
Per esempio:
;(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);
Questo è dove io sono in perdita per il significato della tecnica.
In questo esempio specifico, non vi è alcuna differenza. Penso che per una classe più complicata, potrebbe essere importante, a seconda di cosa sta facendo il framework all'interno dell'ambito extra. – Domenic
@Domenic - Il tuo è sulla falsariga della risposta che speravo. Mi chiedo se qualcuno potrebbe essere in grado di elaborare di più su questo. – natlee75