> For the complete documentation index, see [llms.txt](https://thedvlpr.gitbook.io/javascript-for-dummies/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://thedvlpr.gitbook.io/javascript-for-dummies/obekty.-metody.md).

# Объекты. Методы

JavaScript простым языком

[![Generic badge](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)](https://img.shields.io/badge/JavaScript-%D0%B4%D0%BB%D1%8F%20%D1%82%D1%83%D0%BF%D1%8B%D1%85-green.svg)

![](https://3367117456-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8VRUyYIp5X-d6oGwV2%2F-M8WQxPmzEtNsOTzF_Sz%2F-M8WR6K3zVQyDQSRaPDi%2Fimg-37.png?alt=media\&token=a50d7561-d460-4edf-abd7-7c568527ffcc)

### **Что такое метод объекта?** <a href="#toc_1" id="toc_1"></a>

На самом деле **метод – это обычная функция**. Ничего сверхъестественного. Обычная, особо ничем не примечательная **функция**, которая просто-напросто находится внутри объекта и как-то связана с самим этим объектом.

### **Добавление метода** <a href="#toc_2" id="toc_2"></a>

В прошлом [уроке](/javascript-for-dummies/obekty.-svoistva..md) мы рассматривали `свойства объекта` и создали объект котика:

```javascript
const catVasya = {
   name: 'Вася',
   age: 2,
   color: 'рыжий',
   weight: 3
};
```

Так вот, мы имеем **имя котика**, его **возраст**, **цвет** и **вес**. Получается, мы дали котику некое `описание`, но вот делать наш котик пока что ничего не умеет.

Чтобы он что-то научился делать нам нужно добавить в **объект метод (функцию)**. Давай научим котика `мяукать`, для этого добавим в объект `метод` под названием `mew`:

```javascript
const catVasya = {
   name: 'Вася',
   age: 2,
   color: 'рыжий',
   weight: 3,
   mew: function() {
      console.log('мяу-мяу');
   }
};
```

Как видишь, функция в объект добавляется точно так же, как и обычное свойство, за тем исключением, что значение этого свойства – **функция**.

Правда, хочу заметить, что это не единственный способ определять метод внутри объекта. Очень часто ты можешь увидеть такую запись:

```javascript
mew() {
  console.log('мяу-мяу');
}
```

Данная запись считается **краткой** и **используется достаточно часто**.

### **Вызов метода** <a href="#toc_3" id="toc_3"></a>

Теперь у получившегося объекта мы можем вызвать данный метод, как обычную функцию:

```javascript
catVasya.mew();
// выведет в консоль: 'мяу-мяу'
```

В целом, все очень просто. Но, согласись, если бы на этом все заканчивалось, то особого смысла в методах и не было бы. Но, есть одна очень ценная вещь, которую умеют методы – **обращаться к другим свойствам и методам того же объекта**.

Давай представим, что мы попали в сказочную страну, где животные разговаривают. Следовательно, наш котик, может назвать своё имя. Поэтому, добавим ему такую возможность, добавив в наш объект **метод** `sayName`.

Внутри объекта лежит свойство `name`, следовательно, из метода `sayName` нам как-то нужно **достучаться** до этого свойства. Делается это просто, с помощью ключевого свойства `this`:

```javascript
const catVasya = {
   name: 'Вася',
   age: 2,
   color: 'рыжий',
   weight: 3,
   mew: function() {
      console.log('мяу-мяу');
   },
   sayName() {
      console.log('Привет, я кот ' + this.name);
   }
};

catVasya.sayName();
// выведет в консоль: 'Привет, я кот Вася'
```

Здесь я специально использовал другой вариант определения метода `sayName`, для того, чтобы показать, что в нем нет ничего страшного.

Внутри этого метода мы вызываем `this.name`, что фактически означает: **возьми свойство name из текущего объекта**. С помощью `this` мы можем обращаться к любым свойствам и к любым методам текущего объекта.

### **Именование методов** <a href="#toc_4" id="toc_4"></a>

Хотелось бы заострить твоё внимание на одном важном аспекте – **именование методов**.

Если **свойства** мы всегда называем **именем существительным**, то **методы** мы всегда называем используя **глаголы**. В нашем примере оба добавленных метода имеют глагол в своем названии: `mew` – мяукать, `sayName` – назвать имя.

**Всегда называй методы с использованием глаголов, таковы правила и это поможет различать методы от свойств**.

### **Домашнее задание** <a href="#toc_5" id="toc_5"></a>

Добавить несколько **методов** нашему получившемуся котику, с помощью которых, он мог бы рассказать о своем **весе** и **цвете**.

Эти **методы** определить разными способами, которые мы прошли с тобой выше.
