我的理解是Javascript模块模式模拟基于类的语言中的类,但我还没有找到使用此模式实例化对象的示例。在Java中,类实例化如下:
var myClassInstance = new MyClass();
我见过的所有模块模式教程都解释了使用这种基本语法创建模块:
var MyModule = (function(){
var privateMember = 'foo';
function publicMember() {
}
return {
publicMember: publicMember
}
}());
MyModule
的新实例?答案 0 :(得分:3)
如何在此示例中创建
MyModule
的新实例?
在您的示例中,您无法创建模块的实例,因为它是一个普通对象。
模块是否要实例化?
大多数情况并非如此,但如果您的模块应首先被实例化以便使用它,那么它取决于您。
使用模块模式实例化对象的正确方法是什么?
可以模拟课程'在这样的JavaScript中:
var MyClass = (function(){
function MyClass() {
}
var privateMethod = function() {};
MyClass.staticMethod = function() {};
MyClass.prototype.instanceMethod = function() {};
return MyClass;
}());
var classInstance = new MyClass();
像这样的模块或命名空间,就像你的例子一样:
var MyModule = (function(){
var MyClass = (function(){
function MyClass() {
}
var privateMethod = function() {};
MyClass.staticMethod = function() {};
MyClass.prototype.instanceMethod = function() {};
return MyClass;
}());
return {
MyClass: MyClass
};
}());
var classInstance = new MyModule.MyClass();
这些是非常简单的例子,但这种模式可能非常复杂。像这个模块的另一个例子,你必须实例化才能使用它的类:
var MyModule = (function() {
/** Module constructor */
function MyModule(arg0, arg1) {
this.MyClass = (function() {
/** Class constructor */
function MyClass() {
this.publicArg0 = arg0;
this.publicArg1 = arg1;
}
var privateMethod = function() {};
MyClass.staticMethod = function() {};
MyClass.prototype.instanceMethod = function() {};
return MyClass;
}());
};
return MyModule;
}());
var moduleInstance = new MyModule('#some', 1324);
var classInstance = new moduleInstance.MyClass();
console.log(classInstance.publicArg0) // "#some"
console.log(classInstance.publicArg1) // "1324"