Готовый перевод Modern JS Cheatsheet / Памятка по современному JavaScript: Статические методы

Внимание! Этот перевод, возможно, ещё не готов, так как модераторы установили для него статус «идёт перевод»

### Статические методы

#### Краткое объяснение

Ключевое слово `static` используется в классах для объявления статических методов. Статические методы - это функции в классе, которые принадлежат к объектам класса, и недоступны никаким экземплярам этого класса.

#### Пример кода

```js
class Repo{
static getName() {
return "Repo name is modern-js-cheatsheet"
}
}

//Обратите внимание, что нам не пришлось создавать экземпляр класса Repo

console.log(Repo.getName()) //Repo name is modern-js-cheatsheet

let r = new Repo();
console.log(r.getName()) //Не пойманный TypeError: repo.getName не является функцией
```

#### Подробное объяснение

Статические методы можно вызвать в другом статическом методе, используя ключевое слово `this`, однако это не работает для нестатических методов. Нестатические методы не могут напрямую обращаться к статическим методам, используя ключевое слово `this`.

##### Вызов статических методов из статического метода.

Для вызова статического метода из другого статического метода можно использовать ключевое слово `this` следующим образом:

```js
class Repo{
static getName() {
return "Repo name is modern-js-cheatsheet"
}
static modifyName(){
return this.getName() + '-added-this'
}
}
console.log(Repo.modifyName()) //Repo name is modern-js-cheatsheet-added-this
```

##### Вызов статических методов из нестатических методов.

Нестатические методы могут вызывать статические двумя способами:

1. ###### Используя имя класса.

Чтобы получить доступ к статическому методы из нестатического, используем имя класса и вызываем статический метод как обычное свойство, например, `ClassName.StaticMethodName`

```js
class Repo{
static getName() {
return "Repo name is modern-js-cheatsheet"
}

useName(){
return Repo.getName() + ' and it contains some really important stuff'
}
}

// нужно создать экземпляр класса для использования нестатических методов
let r = new Repo()
console.log(r.useName()) //Repo name is modern-js-cheatsheet and it contains some really important stuff
```

2. ###### Используя конструктор

Статические методы можно вызвать как свойства объекта-конструктора класса.

```js
class Repo{
static getName() {
return "Repo name is modern-js-cheatsheet"
}
useName(){

//Вызывает статический метод как обычное свойство конструктора
return this.constructor.getName() + ' and it contains some really important stuff'
}
}

// нужно создать экземпляр класса для использования нестатических функций
let r = new Repo()
console.log(r.useName()) //Repo name is modern-js-cheatsheet and it contains some really important stuff
```

#### Внешние ресурсы

- [Ключевое слово static- MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static)
- [Статические методы - Javascript.info](https://javascript.info/class#static-methods)
- [Статические члены в ES6- OdeToCode](http://odetocode.com/blogs/scott/archive/2015/02/02/static-members-in-es6.aspx)

Внимание! Этот перевод, возможно, ещё не готов.
Его статус: идёт перевод

Переведено на Нотабеноиде
http://notabenoid.org/book/70916/383614

Переводчики: a_popova

Настройки

Готово:

100.00% КП = 1.0