我在javascript中使用模块模式。 它是一种创建“类”实例的方法吗? 我正在以正确的方式使用它?
var moduleClass = (function () {
var a =5;
return {
getA: function () {
console.log(a);
}
};
})();
var instance = moduleClass;
instance.getA();
http://jsfiddle.net/PzLKy/ 如何在新实例上传递参数?
答案 0 :(得分:10)
你真的不需要新的东西,下面是正确的代码来实现你想要达到的目标。
另外,be really careful while using new, if used unwisely it can start clobbering your Global variable
,如果你想使用new,John Resig对如何以正确的方式做一个非常好的解释,更多阅读John Resig的这篇文章
http://ejohn.org/blog/simple-class-instantiation/
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是对的,绝对不要害怕使用构造函数,但这里有一些你需要注意的事情
取自John Resig在第一段中提到的文章,
假设这是您的代码
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);
}
结束,
因此,如果您认为构造函数是解决问题的最佳方法,请使用它。但请注意,John的简单类实例化也是一个非常有用的模式,尝试通过它,他还解释了泛型构造函数。
答案 1 :(得分:0)
使用构造函数。不要害怕“新”,只要明智地使用它。
注意:标准命名约定是命名将用作具有大写字母的函数构造函数的函数。 (即ModuleClass而不是moduleClass)
function ModuleClass() {
var a =5;
return {
getA: function () {
console.log(a);
}
};
};
或者如果你足够勇敢地了解JavaScript中的'this'关键字。
function ModuleClass() {
var a =5;
this.getA = function () {
console.log(a);
};
};
var instance = new moduleClass();
instance.getA();
答案 2 :(得分:-1)
对于创建实例,您必须使用任何功能的关键字new
。
此函数aka Constructor可以帮助您创建多个实例
var moduleClass = (function () {
var a =5;
return {
getA: function () {
console.log(a);
}
};
})();
var instance = new moduleClass;
instance.getA();
构造函数:构造函数与new关键字一起使用,它们是为对象提供原型的方法之一。
REFER - >