In Javascript ist jede Funktion auch ein Objekt, so dass jeder Funktion Eigenschaften zugewiesen werden können. Das ist es, was dein erster Block Code macht. Es weist der Funktion CookieHandler
nur Eigenschaften zu. Wenn CookieHandler als Objektdefinition gemeint ist, dann sind diese, obwohl nicht exakt identisch, analog zu statischen Eigenschaften in anderen OO-Sprachen. Wenn es nicht als Objektdefinition gemeint ist, dann ist CookieHandler wie ein Javascript-Namespace und getCookie
und setCookie
sind wie Eigenschaften in diesem Namespace.
Ihr zweiter Codeblock weist dem Prototyp Eigenschaften zu. Diese Eigenschaften werden von einem instanziierten CookieHandler-Objekt geerbt.
Also, mit dem ersten Codeblock:
var CookieHandler = function() {};
CookieHandler.getCookie = function (key) {
};
CookieHandler.setCookie = function (key, value) {
};
Sie können einfach anrufen frei CookieHandler.getCookie()
jederzeit. CookieHandler
ist wie ein Namespace-Objekt und getCookie
und setCookie
sind Eigenschaften für den Namespace.
Wenn Sie ein CookieHandler Objekt wie zu erstellen:
var x = new CookieHandler();
x.getCookie(); // does not work
x.setCookie(); // does not work
Dann würde x
nicht getCookie()
oder setCookie()
Methoden. Diese Methoden existieren nur für das Objekt CookieHandler
. Sie werden nicht von Instanzen von CookieHandler geerbt.
Mit Ihrem zweiten Codeblock:
var CookieHandler = function() {};
CookieHandler.prototype.getCookie = function (key) {
};
CookieHandler.prototype.setCookie = function (key, value) {
};
Sie Eigenschaften definieren, die Instanzen von CookieHandler
erben werden (Instanzen erben Eigenschaften auf dem Prototyp). Also, wenn Sie das tun:
var x = new CookieHandler();
x.getCookie(); // works
x.setCookie(); // works
So verwenden Sie die prototype
, wenn Sie möchten, Eigenschaften definieren (in der Regel Methoden), die Instanzen des Objekts erben. Wenn Sie nicht versuchen, Instanzmethoden zu definieren, fügen Sie die Methoden einfach in ein beliebiges Objekt ein, wie in Ihrem ersten Codeblock.
@RGraham - in Javascript, seinen ersten Codeblock wird mit dem 'CookieHandler' Objekt wie ein Namespace, dass Sie nur' getCookie execute() ', wenn Sie es nennen, wie 'CookieHandler.getCookie()'. Das ist alles, was ich sagen will. – jfriend00