W JavaScript każda funkcja jest również obiektem, więc każda funkcja może mieć przypisane do niej właściwości. To właśnie robi twój pierwszy blok kodu. Po prostu przypisuje właściwości do funkcji CookieHandler
. Jeśli CookieHandler ma być definicją obiektu, to jednak nie jest tożsama, są one analogiczne do właściwości statycznych klasy w innych językach OO.
Jeśli nie jest to definicja obiektu, to CookieHandler jest jak przestrzeń nazw Javascript, a getCookie
i setCookie
są podobne do właściwości w tej przestrzeni nazw.
Twój drugi blok kodu przypisuje właściwości do prototypu. Te właściwości zostaną odziedziczone przez instancyjny obiekt CookieHandler.
Tak, z pierwszego bloku kodu:
var CookieHandler = function() {};
CookieHandler.getCookie = function (key) {
};
CookieHandler.setCookie = function (key, value) {
};
można po prostu zadzwonić CookieHandler.getCookie()
swobodnie w każdej chwili. CookieHandler
jest jak obiekt przestrzeni nazw, a getCookie
i setCookie
są właściwościami w przestrzeni nazw.
Jeśli utworzyć obiekt CookieHandler takich jak:
var x = new CookieHandler();
x.getCookie(); // does not work
x.setCookie(); // does not work
Następnie x
nie miałby getCookie()
lub setCookie()
metod. Te metody istnieją tylko na obiekcie CookieHandler
. Nie są dziedziczone przez instancje CookieHandler.
Z drugiego bloku kodu:
var CookieHandler = function() {};
CookieHandler.prototype.getCookie = function (key) {
};
CookieHandler.prototype.setCookie = function (key, value) {
};
jesteś właściwości, które instancje CookieHandler
będzie dziedziczyć zdefiniowanie (przypadki dziedziczenia własności na prototypie). Więc, kiedy zrobić:
var x = new CookieHandler();
x.getCookie(); // works
x.setCookie(); // works
tak, użyj prototype
kiedy chcesz określić właściwości (zwykle metody), że instancje obiektu będzie dziedziczyć. Jeśli nie próbujesz zdefiniować metod instancji, po prostu umieść metody na dowolnym obiekcie, tak jak w pierwszym bloku kodu.
@RGraham - w JavaScript, jego pierwszy blok kodu jest przy użyciu 'obiekt CookieHandler' jak w przestrzeni nazw, które można wykonać tylko' GetCookie() 'jeśli nazywają go jako 'CookieHandler.getCookie()'. To wszystko, co próbuję powiedzieć. – jfriend00