chyba rypnąłeś się w kodzie gdyż... patrząc na to co chyba chciałeś osiągnąć to this.zmienna i this.zmienna2 są publiczne, prywatna jest zmienna3 oraz metoda priv... ale jeśli chodzi o zużycie pamięci (którym w sumie można się nie przejmować) i szybkość działania zwłaszcza jeśli obiekt króciutko używasz a tworzysz ich wiele to lepiej zapisywać zmienne prywatne przez konwencje... całą aplikację możesz zamknąć do modułu i z niego udostępnić dopiero metody prywatne jeśli na stronie są zewnętrzne skrypty i chcesz ograniczyć dostęp lub by nie było kolizji zmiennych w funkcjach anonimowych i w nich zwracać interfejs = (function(window, undefined){... return {};})(window)... a propo modułowości i wygodniejszego podziału kodu możesz zainteresować się require.js lub curl.js, choć też będzie dodatkowy narzut na anonimowe funkcje to jeśli dużo piszesz w js powinieneś poczuć wygodę...
teraz pasowało by jeszcze napisać co się dzieje a co by się działo gdy masz zmienne/metody zdefiniowane w prototype (no te zajmują znacznie mniej pamięci gdyż nie są tworzone za każdym razem) - zwłaszcza tyczy się to metod a nie zmiennych, chyba, że chcesz mieć dostęp do zmiennych prywatnych ale wtedy tworzysz za każdym razem nową funkcję w nowej instancji obiektu, prototype jest troszkę ale tylko troszkę podobny do klonowania w php, bardziej jest to obiekt z metodami i zmiennymi "dziedziczony" przez kompozycję, tak jakby referencja do prototypu, no nie tak jakby ale tak jest, więc nie ma narzutu pamięci... podam nietypowe przykłady
po prostu zmienne i funkcje które masz zdefiniowane nie w prototypie są dodatkowym narzutem pamięci, choć nie zawsze, bo metodę możesz przypisać z innego obiektu...
function Test(zmienna1, zmienna_jakas){
//np. tą zmienną zawsze przypisujemy więc nie ma sensu ją definiować w prototype ;]
this.zmienna = zmienna1;
// np. nie zawsze podajemy zmienną w konstruktorze
if(zmienna_jakas)
this.zmienna_domyslna = zmienna_jakas;
if(true) // czytaj niżej komentarze
// ta metoda jest zawsze od nowa tworzona ;/
this.metoda_domyslna = function(){return 6};
}
// tylko taki jest zens definiowania zmiennych w prototype, innego nie widzę ;]
Test.prototype.zmienna_domyslna = 5;
Test.prototype.get_zmienna = function(){return this.zmienna};
// to niżej nie ma sensu robić, chyba, że na zewnątrz obiektu dopisujesz metody lub w konstruktorze w nietypowej sytuacji nadpisujesz metodę
Test.prototype.metoda_domyslna = function(){return 5;};
var oTest = new Test(6, 6);
console.log(oTest.get_zmienna(), oTest.zmienna_domyslna, oTest.metoda_domyslna());
delete oTest.zmienna_domyslna;
delete oTest.metoda_domyslna;
console.log(oTest.get_zmienna(), oTest.zmienna_domyslna, oTest.metoda_domyslna());
//dalszy delete na obiekcie i tak nic nie da, trzeba by wykonywać operacje na protytypie
oTest.zmienna_domyslna = 7;
oTest.metoda_domyslna = function(){return 7;}
console.log(oTest.get_zmienna(), oTest.zmienna_domyslna, oTest.metoda_domyslna());