在全局对象中定义的类中的Javascript静态方法

时间:2012-04-16 10:06:02

标签: javascript oop class static-methods

我知道Javascript没有像传统OOP语言那样的类,并且“类”定义(如下所示)只是一个可以与new关键字一起使用的函数对象:

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 */ };

我正在考虑在MyStaticMethod函数范围内定义MyClass的方法 - 这可能吗?

1 个答案:

答案 0 :(得分:0)

可以这样做:

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

但我认为这是一个坏主意。一般来说,我认为定义构造函数的静态和实例方法OUTSIDE是更好的做法(因为它更具可读性)。如:

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