Готовый перевод 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
Настройки
Готово:
