繁体   English   中英

ECMAScript 6类中静态方法的目的

[英]Purpose of Static Methods in ECMAScript 6 Classes

ES6中的静态类方法应该处理哪种与ES5有关的问题?

Babel文档在其有关ES6类的部分中具有以下示例,尽管实际上并未说明该模式完成的工作。

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

class SkinnedMesh extends THREE.Mesh {
  constructor(geometry, materials) {
    super(geometry, materials);

    this.idMatrix = SkinnedMesh.defaultMatrix();
    this.bones = [];
    this.boneMatrices = [];
    //...
  }
  update(camera) {
    //...
    super.update();
  }
  static defaultMatrix() {
    return new THREE.Matrix4();
  }
}

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

因此,此 ES6 ES2015代码:

class A {
   static doStuff() {}
}

...等于(在ES5中):

function A() { }
A.doStuff = function() { };

为什么需要静态函数? 好的,编译后的代码根本不支持静态,因为即使函数都是对象,而且静态函数也变成了构造函数的自身属性

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

class A {
   static create() {
      // Specific factory method code
   } 
}

var instance = A.create();

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

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

class MyNamespace {
  static foo() { ... }
  static bar() { foo(); }
}

这是组织代码的非常方便的方法-将内容放入名称空间。

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

这与其他OOP语言中的标准静态方法用例不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM