April 21, 2020

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

Продолжаем тему объектов и сегодня на повестке дня – методы.

Что такое метод объекта?

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

Добавление метода

В прошлой статье мы рассматривали свойства объекта и создали объект котика:

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

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

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

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

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

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

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

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

Вызов метода

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

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

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

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

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

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

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

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

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

Именование методов

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

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

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

Домашнее задание

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

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