Сегодня отвечал на вопросы, встретился такой (немного изменен):
А можно заставить функцию в объекте выполниться, когда я вывожу весь объект через console.log?
```
const selection = {
friends: () => ['Павел', 'Игорь', 'Настя'],
};
console.log(selection); // { friends: [Function: friends] }
```
Короткий ответ - нет :) Сам console.log ничего не выполняет, он просто показывает инвентаризацию, какие свойства и какие значения внутри лежат. А функция - это ведь такое же значение, как 42 или 'Вася'. Функция оживает только при явном вызове, вроде selection.friends().
Можно вспомнить про геттеры, это функции, которые нужны для получения значения, как будто мы получаем значение из свойства:
```
const byMethod = {
friends() { return ['Павел', 'Игорь']; },
};
const byGetter = {
get friends() { return ['Павел', 'Игорь']; },
};
console.log(byMethod); // { friends: [Function: friends] }
console.log(byGetter); // { friends: [Getter] } - массива все так же нет
console.log(byMethod.friends); // [Function: friends] - рецепт
console.log(byGetter.friends); // [ 'Павел', 'Игорь' ] - тут получили готовый массив
```
Геттер все равно не заставляет console.log выполнить код, когда объект печатается, геттеры все равно не будут вычисляться. Геттер меняет другое - чтение свойства. Если мы обратимся к byGetter.friends, то код в геттере выполнится и вернет результат.
Есть еще возможность "печатать объект по-особому", речь про toString и Symbol.toPrimitive. Но это уже отдельная история ;)
Просмотры: 11