Объекты. Методы
Продолжаем тему объектов и сегодня на повестке дня – методы.
Что такое метод объекта?
На самом деле метод – это обычная функция. Да, ничего сверхъестественного и страшного. Обычная, особо ничем не примечательная функция, которая просто напросто находится внутри объекта и как-то связана с самим этим объектом.
Добавление метода
В прошлой статье мы рассматривали свойства объекта и создали объект котика:
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 – сказать имя.
Всегда называй методы с использованием глаголов, таковы правила и это поможет различать методы от свойств.
Домашнее задание
Добавить несколько методов нашему получившемуся котику, с помощью которых, он мог бы рассказать о своем весе и цвете.
Эти методы определить разными способами, о которых написано в статье.