In Javascript, qualsiasi funzione è anche un oggetto, quindi a qualsiasi funzione possono essere assegnate delle proprietà. Questo è ciò che sta facendo il tuo primo blocco di codice. Assegna solo le proprietà alla funzione CookieHandler
. Se CookieHandler è inteso come una definizione di oggetto, anche se non esattamente identico, questi sono analoghi alle proprietà statiche di classe in altri linguaggi OO.
Se non è inteso come una definizione di oggetto, quindi CookieHandler è come uno spazio dei nomi Javascript e getCookie
e setCookie
sono come proprietà in quello spazio dei nomi.
Il secondo blocco di codice assegna proprietà al prototipo. Queste proprietà saranno ereditate da un oggetto CookieHandler istanziato.
Così, con il primo blocco di codice:
var CookieHandler = function() {};
CookieHandler.getCookie = function (key) {
};
CookieHandler.setCookie = function (key, value) {
};
Si può solo chiamare liberamente CookieHandler.getCookie()
in qualsiasi momento. CookieHandler
è come un oggetto dello spazio dei nomi e getCookie
e setCookie
sono proprietà nello spazio dei nomi.
Se si crea un oggetto CookieHandler come ad esempio:
var x = new CookieHandler();
x.getCookie(); // does not work
x.setCookie(); // does not work
Poi, x
non avrebbe getCookie()
o setCookie()
metodi. Questi metodi esistono solo sull'oggetto CookieHandler
. Non sono ereditati da istanze di CookieHandler.
Con il secondo blocco di codice:
var CookieHandler = function() {};
CookieHandler.prototype.getCookie = function (key) {
};
CookieHandler.prototype.setCookie = function (key, value) {
};
si definiscono le proprietà che le istanze di CookieHandler
erediteranno (casi ereditano le proprietà sul prototipo). Così, quando si esegue:
var x = new CookieHandler();
x.getCookie(); // works
x.setCookie(); // works
Quindi, utilizzare il prototype
quando si desidera definire le proprietà (di solito metodi) che le istanze dell'oggetto erediteranno. Se non si sta tentando di definire i metodi di istanza, è sufficiente inserire i metodi su qualsiasi oggetto come nel primo blocco di codice.
@RGraham - in Javascript, il suo primo blocco di codice utilizza l'oggetto 'CookieHandler' come uno spazio dei nomi in quanto è possibile solo eseguire' getCookie() 'se lo si chiama come 'CookieHandler.getCookie()'. Questo è tutto ciò che sto cercando di dire. – jfriend00