Tak naprawdę nie potrzeba tu nowy, Poniżej jest właściwym sposobem na kod, aby osiągnąć to, co staramy się osiągnąć. Również be really careful while using new, if used unwisely it can start clobbering your Global variable
, Jeśli chcesz korzystać z nowych, John Resig ma naprawdę piękny wyjaśnieniu dla jak zrobić to we właściwy sposób, na więcej przeczytać ten artykuł Johna Resig http://ejohn.org/blog/simple-class-instantiation/
http://jsfiddle.net/PzLKy/2/
var moduleClass = (function() {
var a =5;
return {
setA: function (inA) {
a=inA;
} ,
getA: function() {
alert(a);
}
};
})();
var instance = moduleClass;
instance.setA(8);
instance.getA();
edit: contactmatt ma rację, na pewno nie bój użycia konstruktora, ale tutaj jest coś, trzeba zdawać sobie sprawę z
zaczerpnięta z art Johna Resig wspomnianego w akapicie pierwszym,
przypuszczam to jest kod
function User(first, last){
this.name = first + " " + last;
}
var user = new User("John", "Resig");
user.name // John Resig
var user2 = User ("first","last");
user2.name //undefined, also this would pollute your current scope
jeśli wywołanie konstruktora, nie dostanie jakiegokolwiek wskazania i może być koszmar debugowania.
sposób, aby rozwiązać ten jest
function User(first, last){
if (this instanceof User) {
this.name = first + " " + last;
} else
return new User(first, last);
}
do wniosku,
Więc jeśli czujesz, że konstruktor jest najlepszym sposobem dla swojego problemu, użyj go. Ale pamiętaj, że prosta instancja klasowa Johna jest naprawdę użytecznym wzorcem, spróbuj przejść przez to, wyjaśnia również generyczny konstruktor.
użyć funkcji konstruktora zamiast literału, jeśli chcesz przekazać parametry w czasie tworzenia instancji. – dandavis
W twoim kodzie nie ma klasowej konstrukcji. Po prostu masz wygenerowany singleton ze wzorem modułu. Czego * chcesz * - tylko wtedy możemy powiedzieć, że kod jest poprawny? – Bergi
Chcę móc deklarować nowe wystąpienia i przekazywać różne wartości. Nie chcę robić czegoś konkretnego, tylko się uczę. – Petran