我發現了一個模塊模式在JS:的Javascript面向對象編程能力
<script>
var MODULENAME = (function(my, $) {
my.publicVar = "5";
my.publicFn = function() {};
return my;
}(MODULENAME || {}, jQuery));
</script>
但我無法執行實例化。模塊模式是否允許這樣做?
我發現了一個模塊模式在JS:的Javascript面向對象編程能力
<script>
var MODULENAME = (function(my, $) {
my.publicVar = "5";
my.publicFn = function() {};
return my;
}(MODULENAME || {}, jQuery));
</script>
但我無法執行實例化。模塊模式是否允許這樣做?
你的模塊對象可以包含任何東西。也許你正在尋找包括構造函數在內:
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
實例化基本上意味着您將使用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()
不同的方式實例化。
你可以用原型繼承也這樣做:
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
你在哪裏「發現」這樣的事情? – Prinzhorn
你想實例化什麼? MODULENAME分配了自動執行功能的結果。見http://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript瞭解更多詳情。 – helpermethod
「實例化」是什麼意思?你基本上在var中創建了一個靜態類。 – Nunners