Методы

Кроме свойств, у данных могут быть методы. Методы - это функции, находящиеся внутри свойств. С практической точки зрения это значит, что метод работает и вызывается как функция, но делает это как свойство, через точку.

const name = 'Robb';
const upperName = name.toUpperCase();
console.log(upperName); // => ROBB

Встроенные методы, всегда оперируют теми данными, с которыми они связаны. Метод toUpperCase возвращает ту же строку, но преобразуя все символы в верхний регистр. Методов у данных обычно значительно больше, чем свойств, например, для строк их несколько десятков. В документации, на первый взгляд, они описаны немного странно: String.prototype.toLowerCase(). Это описание раскрывает некоторые внутренние детали реализации, которые сейчас не важны, да и мы не изучили всей необходимой базы для разговора о прототипах.

Методы есть и у чисел:

const temperature = 22.93;
// Округление до одного знака после запятой
const roundedTemperature = temperature.toFixed(1);
console.log(roundedTemperature); // => 22.9

// Напрямую можно вызывать так
// Скобки нужны обязательно, иначе не заработает
(22.93).toFixed(1); // 22.9

Хозяйке на заметку. Технически все несколько сложнее. Методы есть не у самих чисел, а у данных (объектов) типа Number. Числа записанные в переменные или константы, автоматически преобразуются к данному типу во время обращения к ним, в это время происходит, так называемый boxing.

Возникает закономерный вопрос. Зачем нужны методы, почему не просто функции? С числами ситуация еще сложнее. Часть операций реализована в виде методов самих чисел, например, .toFixed(), а еще большая часть в виде методов, доступных через Math.

Есть две причины почему так сделано:

  1. Исторически так сложилось. JavaScript разрабатывался слишком быстро и поэтому не все было продумано хорошо.
  2. Далеко не все функции имеют отношение к конкретному значению. Возьмем для примера Math.min. Эта функция находит минимальное число среди всех, которые ему были переданы. Эту функцию не логично делать методом конкретного числа, например так (1).min(). Она не имеет никакой связи с конкретным числом.

С другой стороны, функции, работающие с конкретным числом, для единообразия должны быть реализованы как методы. К таким функциям относится получение модуля числа. То есть вместо такого вызова Math.abs(-10), логично иметь такой: (-10).abs().

Что касается методов в целом, то не все так однозначно. Есть языки в которых методов нет и там все прекрасно, есть языки где методы это основной способ работы с функциями, но даже в этих языках всегда наряду с методами используются обычные функции. JavaScript - язык, в котором прижились оба подхода, в нем активно используются как обычные функции, так и методы. О плюсах и минусах подобных подходах подробно рассказывается в курсах посвященным ООП.

Задание

Приведите строку text к нижнему регистру и напечатайте ее на экран.


Нашли ошибку? Есть что добавить? Пулреквесты приветствуютсяhttps://github.com/hexlet-basics
Упражнение доступно только авторизованным пользователям.

Пожалуйста, авторизуйтесь, это необходимо для отслеживания прогресса выполнения уроков. Если у вас ещё нет учётной записи, то сейчас самое время создать аккаунт.