В этом руководстве вы узнаете о статических методах 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()
для вызова статического метода в конструкторе класса или методе экземпляра.