Jestem stosunkowo nowy w JS i mam problemy poprawnie emulujące zasady OOP.Klasy JavaScript i zakres zmienny
Chyba mam dwa pytania. Pytanie pierwsze dotyczy wielu sposobów deklarowania zmiennych.
Say mam klasy:
function clazz(a)
{
this.b = 2;
var c = 3;
this.prototype.d = 4; // or clazz.prototype.d = 4?
}
var myClazz = new clazz(1);
mam rację w następujących ocen:
a jest prywatna zmienna jest wystąpienie specyficznych (tj różne instancje clazz będzie miał wyjątkowe i niezależne zmienne 'za'). Dostęp do niego można uzyskać z poziomu clazz jako: "a".
b jest publiczną zmienną, która jest specyficzna dla instancji. Dostęp do niego można uzyskać od clazz jako "this.b", a od zewnętrznego clazz jako "myClazz.b".
c jest zmienną prywatną, która jest statyczna lub specyficzna dla klasy (to znaczy różne instancje clazz mają tę samą zmienną "c"). Dostęp do niego można uzyskać z dowolnego wystąpienia clazz jako "c", a zmiany w instancji clazz są odzwierciedlane we wszystkich instancjach clazz.
d jest publiczną zmienną, która jest specyficzna dla typu statycznego/klasy. Dostęp do niego można uzyskać z dowolnego miejsca za pomocą "clazz.prototype.d" lub "myClazz.prototype.d".
Ogólna kwestia, którą mam z moim zrozumieniem schematu zmiennych, polega na tym, że nie ma możliwości zadeklarowania zmiennej prywatnej, która NIE jest statyczna (tj. Unikalna wersja dla każdej instancji klasy).
Drugie pytanie dotyczy różnych typów deklaracji klas.
Używam:
var MySingleton = new function() {...};
do tworzenia pojedynczych. Czy to jest poprawne? Jestem też pewien, co do efektu „nowe” słowo kluczowe w tej sytuacji, a także dodanie() funkcja szelki do końca deklaracji jako tak:
var MySingleton = new function() {...}();
Używam tego wzoru do zadeklaruj klasę, a następnie instancję instancji tej klasy:
function myClass() {...};
var classA = new myClass();
var classB = new myClass();
Czy to właściwa metoda?
+1. Bardzo kompletna i wyczerpująca odpowiedź. –
Dziękuję za odpowiedź informacyjną. Dodatek: Jakie są namacalne różnice między podejściem modułowym do deklaracji singletowej a stylem wymienionym w oryginalnym wpisie? – Cmc
** @ Lior: ** thanks !, ** Cmc: ** Napisałem trochę o składance, którą opublikowałeś ... – CMS