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

[![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>

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://thedvlpr.gitbook.io/javascript-for-dummies/obekty.-metody.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
