static

static

static 关键字为一个类定义了一个静态方法。

语法

static methodName() { ... }

描述

静态方法调用直接在类上进行,不能在类的实例上调用。静态方法通常用于创建实用程序函数。

调用静态方法

从另一个静态方法

在同一个类中的一个静态方法调用另一个静态方法,你可以使用this关键字。

class StaticMethodCall { static staticMethod() { return 'Static method has been called'; } static anotherStaticMethod() { return this.staticMethod() + ' from another static method'; } } StaticMethodCall.staticMethod( // 'Static method has been called' StaticMethodCall.anotherStaticMethod( // 'Static method has been called from another static method'

从类的构造函数和其他方法

静态方法不能直接在非静态方法中使用this关键字来访问。你需要使用类名来调用它们:CLASSNAME.STATIC_METHOD_NAME()或者将其作为构造函数的属性来调用该方法:this.constructor.STATIC_METHOD_NAME().

class StaticMethodCall { constructor() { console.log(StaticMethodCall.staticMethod() // 'static method has been called.' console.log(this.constructor.staticMethod() // 'static method has been called.' } static staticMethod() { return 'static method has been called.'; } }

示例

下面的例子说明了这几点:

1.一个静态方法在一个类上是如何被实现的。

2.具有一个静态成员的一个类是可以被子类化 。

3.一个静态方法如何能被调用和不能被调用。

class Triple { static triple(n) { if (n === undefined) { n = 1; } return n * 3; } } class BiggerTriple extends Triple { static triple(n) { return super.triple(n) * super.triple(n } } console.log(Triple.triple() // 3 console.log(Triple.triple(6) // 18 var tp = new Triple( console.log(BiggerTriple.triple(3) // 81 (not affected by parent's instantiation) console.log(tp.triple() // 'tp.triple is not a function'.

规范

SpecificationStatusComment
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Class definitions' in that specification.StandardInitial definition.
ECMAScript Latest Draft (ECMA-262)The definition of 'Class definitions' in that specification.Living Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support42.0(Yes)45 (45)???

FeatureAndroidEdgeFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileChrome for Android
Basic supportNo support(Yes)45.0 (45)???42.0