Javascript ECMAScript 6类中静态方法的用途

Javascript ECMAScript 6类中静态方法的用途,javascript,class,ecmascript-6,Javascript,Class,Ecmascript 6,ES6中的静态类方法应该处理ES5的哪些问题 Babel文档中有以下示例,尽管它实际上没有说明此模式实现了什么 类支持基于原型的继承、超级调用、实例和静态方法以及构造函数 考虑只包含静态方法的类: class MyNamespace { static foo() { ... } static bar() { foo(); } } 这是在名称空间中组织代码的一种非常方便的方法 MyNamespace.foo(); MyNamespace.bar(); 这与其他OOP语言中的标准不同。如

ES6中的静态类方法应该处理ES5的哪些问题

Babel文档中有以下示例,尽管它实际上没有说明此模式实现了什么

类支持基于原型的继承、超级调用、实例和静态方法以及构造函数


考虑只包含静态方法的类:

class MyNamespace {
  static foo() { ... }
  static bar() { foo(); }
}
这是在名称空间中组织代码的一种非常方便的方法

MyNamespace.foo();
MyNamespace.bar();

这与其他OOP语言中的标准不同。

如果使用Babel编译ES6代码,并且某些类包含静态方法,ES5生成的代码将只是将该静态函数添加到构造函数中

因此,此ES6 ES2015代码:

class A {
   static doStuff() {}
}
…等于(在ES5中):

为什么需要静态函数?好吧,传输的代码根本不支持静态,因为即使函数也是对象,静态函数也会变成构造函数自己的属性

静态函数或属性可用于实现工厂模式:


无论如何,静态成员使用是一个非常分散的话题,它超出了客观答案的范围。它有很多用例,这些用例对任何编程语言都是通用的。

就我个人而言,我使用
static
关键字向开发人员指出,此方法不使用当前实例中的信息-类似于使用下划线前缀名称来指示私有属性-尽管情况可能并非如此,但如果使用正确,这是一个很好的自评功能非常好的示例,谢谢!我建议将“defaultMatrix”重命名为“createDefaultMatrix”,因为这是一种非常经典的“工厂方法”模式(“new”运算符的封装),许多人都同意这种约定。@MartinMeeser如问题中所述,此代码取自Babel的文档。请将对象文字用于名称空间。不是空类。@Bergi对象文字有非常不方便的语法。您必须记住放置
和使用匿名函数等。没有理由使用匿名函数吗?您只需执行
constmynamespace={foo(){…},bar(){…}@Bergi逗号在对象文本中是必需的。因此,如果你有大的函数,你很容易迷失在序列中,比如
{},},}等等。。。不管怎么说,这是一个品味问题,两种情况在概念上都是相同的。@1252748每当您有不在实例上操作但肯定与
类相关的函数时,您可以将它们作为类上的静态方法(构造函数充当命名空间)。但是,反过来也不行:如果您想创建一个名称空间,但没有实例或构造函数,请不要使用
class
。什么是
构造函数函数对象函数?@1252748是构造函数函数的自有属性。我要编辑了。哦,这更清楚一点,是的。但我不是OP,我只是浏览了一下主题,偶然发现了你的解释。谢谢:)@1252748你不需要成为OP就可以提出改进建议:D
class A {
   static doStuff() {}
}
function A() { }
A.doStuff = function() { };
class A {
   static create() {
      // Specific factory method code
   } 
}

var instance = A.create();