Статические методы в JavaScript с примерами

В этом руководстве вы узнаете о статических методах 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() для вызова статического метода в конструкторе класса или методе экземпляра.
Рейтинг
( Пока оценок нет )
Александр Русаков / автор статьи
Программист, разработчик, 12 лет опыта работы в крупных компаниях. Быстро освоил typescript, делюсь своими знаниями на страницах этого сайта.
Загрузка ...
JavaScript и TypeScript