2

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

我在想一些MyStaticMethodMyClass函数范围内定义的东西——这可能吗?

4

1 回答 1

1

可以这样做:

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 */ }
于 2013-07-22T17:52:44.877 回答