我在JS中找到了一个模块模式:
<script>
var MODULENAME = (function(my, $) {
my.publicVar = "5";
my.publicFn = function() {};
return my;
}(MODULENAME || {}, jQuery));
</script>但是,我不能执行实例化。模块模式允许这样做吗?
发布于 2013-10-11 15:20:37
模块对象可以包含任何内容。也许您希望在其中包含一个构造函数:
var MODULENAME = (function(my, $) {
var privateVar = 10;
my.SomeConstructor = function() {
this.publicVar = 5;
}
my.SomeConstructor.prototype.someMethod = function() {};
my.SomeConstructor.prototype.getPrivate = function() { return 10; };
return my;
}(MODULENAME || {}, jQuery));
var instance = new MODULENAME.SomeConstructor();
instance.publicVar; // 5
instance.privateVar; // undefined
instance.getPrivate(); // 10发布于 2013-10-11 15:03:19
Instantiantion基本上意味着您将使用函数运行new。
所以也许你在找这个?
var Some = function (param) {
var somePrivateVar = 'private';
this.somePublicVar = 'public';
this.method = function () {
return param;
};
};
var some = new Some('abla');
console.log(some.method());
// some.somePrivateVar === undefined
// some.somePublicVar === 'public'在您的示例中,MODULENAME是一个带有publicVar和publicFn的对象(对象,而不是函数)。它并不意味着要以不调用new jQuery()的方式实例化。
发布于 2013-10-11 15:07:33
您也可以使用prototype继承来完成此任务:
var MyClass = function(name)
{
//sharing name within the whole class
this.name = name;
}
MyClass.prototype.getName = function(){
return this.name;//now name is visible to getName method too
}
MyClass.StaticMethod = function()
{
console.log("Im Static");
// and since is not in prototype chain, this.name is not visible
}
var myclass = new MyClass("Carlos");
console.log(myclass.getName())//print "Carlos"
MyClass.StaticMethod()// print "Im Static"
myclass.StaticMethod() // error全硒这篇文章
https://stackoverflow.com/questions/19321337
复制相似问题