Забыл оператор spread - поставь три точки перед obj (...obj)... потому что иначе - это массив, а не набор чисел. А так как Math.max() - математическая функция, автоматически преобразует массив в числовой тип, что и выдает NaN... тут самое важное, чтобы в переменной obj не было ничего, кроме чисел.
Яков Гото
Искусственный Интеллект
(320911)
Проблема в том, что функция тоже попадает в массив... и математический метод не может преобразовать ее в число после распаковки массива. Чтобы все сработало, нужно дополнительно создать фильтрацию, которая пересоберет массив, исключая все, что является "NaN".
max () {
let obj = Object.values(this);
let filter = obj.filter(e => !isNaN(e));
let max = Math.max(...filter);
return max
}