Вам не нужно здесь новый, Ниже правильный способ кодирования, чтобы достичь того, чего вы пытаетесь достичь. Кроме того, be really careful while using new, if used unwisely it can start clobbering your Global variable
, если вы хотите использовать новым, Резиг имеет очень приятные объяснения о том, как сделать это правильно, более читать эту статью Резига 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();
Редактировать: contactmatt прав, определенно не бойтесь использовать конструктор, но вот что вам нужно знать
Взято из статьи Джона Ресига, упомянутой в первом абзаце,
предположим, это ваш код
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
, если вы вызываете конструктор, вы не получите какой-либо индикации и может быть отладки кошмар.
способ решить это
function User(first, last){
if (this instanceof User) {
this.name = first + " " + last;
} else
return new User(first, last);
}
Для Заключаем,
Так что, если вы чувствуете, что конструктор является лучшим способом для вашей проблемы, используйте его. Но имейте в виду, что простой экземпляр класса от Джона - действительно полезный образец, попытайтесь пройти его, он также объясняет общий конструктор.
использовать функцию-конструктор вместо литерала, если вы хотите передать параметры во время создания экземпляра. – dandavis
В коде отсутствует классная конструкция. У вас просто синглтон, сгенерированный с помощью шаблона модуля. Что вы * хотите * - только тогда мы сможем сказать вам, что код верен? – Bergi
Я хочу, чтобы иметь возможность объявлять новые экземпляры и передавать разные значения. Я не хочу делать что-то конкретное, я просто изучаю. – Petran