在本教程中,您将了解 JavaScript 静态方法以及如何有效地使用 JavaScript 静态方法。

JavaScript 静态方法简介

根据定义,静态方法绑定到一个,而不是类的实例。因此,静态方法对于定义帮助器或实用程序方法很有用。

要在 ES6 之前定义静态方法,您可以将其直接添加到类的构造函数。例如,假设您有 Person 类型,如下:

function Person(name) {
    this.name = name;
}

Person.prototype.getName = function () {
    return this.name;
};

下面添加一个静态方法 createAnonymous()Person 类:

Person.createAnonymous = function (gender) {
    let name = gender == "male" ? "John Doe" : "Jane Doe";
    return new Person(name);
};

createAnonymous() 方法被认为是静态方法,因为不依赖 Person 类实例的任何属性值。

要调用 createAnonymous() 方法,您可以使用 Person 类而不是  Person 类的实例:

var anonymous = Person.createAnonymous();

JavaScript ES6 的静态方法

在 ES6,您可以使用关键字 static 定义静态方法。以下示例为 Person 类定义静态方法 createAnonymous()

class Person {
	constructor(name) {
		this.name = name;
	}
	getName() {
		return this.name;
	}
	static createAnonymous(gender) {
		let name = gender == "male" ? "John Doe" : "Jane Doe";
		return new Person(name);
	}
}

要调用静态方法,请使用以下语法:

let anonymous = Person.createAnonymous("male");

如果您尝试从类的实例调用静态方法,您将得到一个错误。例如:

let person = new Person('James Doe');
let anonymous = person.createAnonymous("male");

错误:

TypeError: person.createAnonymous is not a function

从类构造函数或实例方法调用静态方法

要从类构造函数或实例方法调用静态方法,请使用类名,后跟 . 和静态方法:

className.staticMethodName();

或者,您可以使用以下语法:

this.constructor.staticMethodName();

结论

  • JavaScript 静态方法在类的实例之间共享。因此,它们被绑定到类。
  • 通过类名调用静态方法,而不是类的实例。
  • 使用 className.staticMethodName() 或者this.constructor.staticMethodName() 在类构造函数或实例方法调用静态方法。