В этом руководстве вы узнаете о статических методах JavaScript и о том, как их эффективно использовать.
По определению статические методы привязаны к классу, а не к экземплярам этого класса. Поэтому они полезны для определения вспомогательных или служебных методов.
Чтобы определить статический метод до ES6, вы добавляете его непосредственно в конструктор класса. Например, предположим, что у вас есть тип Person следующим образом:
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name;
};В следующем примере к типу Person добавляется статический метод createAnonymous() :
Person.createAnonymous = function(gender) {
let name = gender == "male" ? "John Doe": "Jane Doe";
return new Person(name);
};Метод createAnonymous() считается статическим методом, поскольку он не зависит ни от одного экземпляра типа Person для значений своих свойств.
Чтобы вызвать метод createAnonymous(), вы используете тип Person вместо его экземпляров:
var anonymous = Person.createAnonymous();
Статические методы в ES6
В ES6 вы определяете статические методы с помощью ключевого слова static. В следующем примере определяется статический метод createAnonymous() для класса Person :
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()для вызова статического метода в конструкторе класса или методе экземпляра.
