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

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

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

a_popova 12.10.17 в 14:27

0

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

a_popova 12.10.17 в 14:28

0

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

a_popova 12.10.17 в 14:28

0

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

a_popova 12.10.17 в 14:28

0

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

a_popova 12.10.17 в 14:29

0

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

a_popova 12.10.17 в 14:29

0

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

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

a_popova 12.10.17 в 14:29

0

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

a_popova 12.10.17 в 14:29

0

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

a_popova 12.10.17 в 14:30

0

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

a_popova 12.10.17 в 14:30

0

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

a_popova 12.10.17 в 14:30

0

```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
```

a_popova 12.10.17 в 14:30

0

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

a_popova 12.10.17 в 14:30

0

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

a_popova 12.10.17 в 14:30

0

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

a_popova 12.10.17 в 14:30

0

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

a_popova 12.10.17 в 14:31

0

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

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

a_popova 12.10.17 в 14:31

0

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

a_popova 12.10.17 в 14:31

0

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

a_popova 12.10.17 в 14:32

0

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

a_popova 12.10.17 в 14:32

0

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

a_popova 12.10.17 в 14:33

0

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

a_popova 12.10.17 в 14:34

0

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

a_popova 12.10.17 в 14:34

0

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

a_popova 12.10.17 в 14:35

0

- [Ключевое слово 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)

a_popova 12.10.17 в 14:35

0
Минутку...