2013-10-11 68 views
0

我發現了一個模塊模式在JS:的Javascript面向對象編程能力

<script> 
var MODULENAME = (function(my, $) { 
    my.publicVar = "5"; 
    my.publicFn = function() {}; 
    return my; 
}(MODULENAME || {}, jQuery)); 
</script> 

但我無法執行實例化。模塊模式是否允許這樣做?

+0

你在哪裏「發現」這樣的事情? – Prinzhorn

+1

你想實例化什麼? MODULENAME分配了自動執行功能的結果。見http://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript瞭解更多詳情。 – helpermethod

+0

「實例化」是什麼意思?你基本上在va​​r中創建了一個靜態類。 – Nunners

回答

1

你的模塊對象可以包含任何東西。也許你正在尋找包括構造函數在內:

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 
3

實例化基本上意味着您將使用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是一個對象(對象,而不是函數)publicVarpublicFn。這並不意味着要以與new jQuery()不同的方式實例化。

1

你可以用原型繼承也這樣做:

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 

硒都this article