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

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

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

最佳答案

可以这样做:

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

关于全局对象中定义的类中的 Javascript 静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172144/

相关文章:

javascript - 解析云代码保存未执行。

javascript - 如果在 onRowSelection 中使用 setState,则响应 : Material-ui tableRow can not choose,

javascript - 隐藏内容时如何避免跳位?

oop - "Is a"和"Has a": which one is better?

c++ - 将类对象初始化为引用内存

php - 在 Yii 中包含外部库

javascript - React-router 链接不会被访问

java - 设计模式使组件可扩展、可插拔,而无需更改它所连接的系统

java - 虚拟表/调度表

c# - 如何分配在两个不同的命名空间中声明的同一类对象