Предположим, что мы имеем:Как сделать класс ES6 окончательный (не-subclassible)
class FinalClass {
...
}
Как изменить его, чтобы сделать
class WrongClass extends FinalClass {
...
}
или
new WrongClass(...)
генерировать исключение ? Возможно, наиболее очевидным решением является следующее в конструкторе FinalClass в:
if (this.constructor !== FinalClass) {
throw new Error('Subclassing is not allowed');
}
Кто-нибудь есть более чистое решение, а не повторять эти строки в каждом классе, которые должны быть окончательными (вероятно, с декоратор)?
Интересный вопрос. Есть ли причина, по которой вы пытаетесь это сделать? – gcampbell
Так как в конечном итоге все это скомпилировано до Javascript (<5), где таких вещей не существует, и все это просто объект, который бесконечно гибкий во время выполнения, я думаю, что шансы на это плохие. – deceze
Чтобы более ярко выражать точку, на которую указывает @gcampbell, это выглядит мне плохой идеей, граничащей с ужасным. Например, строки в Java сосать в немалой степени, потому что класс не имеет много полезных методов и был «последним» как преждевременный взлом производительности. –