function f(phrase) {
return class {
sayHi() { console.log(phrase) }
}
}
class User extends f("Привет") {}
new User().sayHi();
function f(phrase) {
return class {
sayHi() { alert(phrase) }
}
}
class User extends f("Привет");
new User().sayHi();
extends является частью определения класса.
ClassDeclaration[Yield, Await, Default]:
class BindingIdentifier[?Yield, ?Await] ClassTail[?Yield, ?Await]
где ClassTail имеет следующую структуру
ClassTail[Yield, Await]:
ClassHeritage[?Yield, ?Await]opt { ClassBody[?Yield, ?Await]opt }
Отсюда видно, что обязательно указывать тело класса, как минимум пустым блоком.
При этом extend указан в ClassHeritage
ClassHeritage[Yield, Await]:
extends LeftHandSideExpression[?Yield, ?Await]
Если применить к примеру в вопросе
class User extends f("Привет") {}
ClassHeritage - extends f("Привет") и далее должно следовать тело класса.
Так как во втором случае тела нет появляется ошибка.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости