2012-04-16 66 views
2

我知道Javascript沒有與傳統的OOP語言一樣的類,並且像下面這樣的「類」定義僅僅是一個可以使用的函數對象與new關鍵字:在全局對象中定義的類中的Javascript靜態方法

function MyClass(){ 
    this.a = function(){ /* Do something */ }; // Public function 
    function b(){ /* Do something */ }; // Private function 
} 

什麼我不知道,如果我定義一個全局對象(避免污染命名空間),並定義這個對象在我的課,我可以定義一個靜態方法我的課比這更好的方式:

var MyObject = { 
    MyClass: function(){ 
    this.a = function(){ /* Do something */ }; // Public function 
    function b(){ /* Do something */ }; // Private function 
    }, 
} 
MyObject.MyClass.MyStaticMethod = function(){ /* Do something */ }; 

我正在考慮沿着MyClass函數範圍內定義MyStaticMethod的方向行事 - 這可能嗎?

回答

0

可以做到這一點:

var MyObject = { 
    MyClass: function(){ 
     this.a = function(){ /* Do instance-y stuff */ }; 
     MyClass.MyStaticMethod = function(){ /* Do static-y stuff */ }; 
    } 
} 

,但我認爲這是一個壞主意。一般來說,我認爲這是更好的做法(因爲它更具可讀性)在構造函數的外部定義靜態方法和實例方法。如:

function MyClass() { /* Do initialization stuff */ } 
MyClass.prototype.a = function() { /* Do instance-y stuff */ } 
MyClass.MyStaticMethod = function() { /* Do static-y stuff */ } 
相關問題