Можно ли использовать нотацию ECMAScript6 class
для объявления переменной статического класса или значения по умолчанию для переменной экземпляра? Без class
то, что я имею в виду, будет записано как
function MyClass(arg) { if(arg) this.arg = arg; }
MyClass.classVariable = 42;
MyClass.prototype.arg = "no arg specified";
Наиболее очевидным обозначением типа ES6, на мой взгляд, было бы
class MyClass {
constructor(arg) { if(arg) this.arg = arg; }
static let classVariable = 42;
let arg = "no arg specified";
}
Но это не сработает, так как согласно текущей спецификации проекта, только производные классы ClassElement являются статическими и экземплярами и точками с запятой самих себя. Хорошо, можно использовать пару методов getter и setter, чтобы достичь аналогичной семантики, что я изложил, но я предполагаю, что это серьезное снижение производительности и с действительно причудливым синтаксисом.
Есть ли какой-либо проект, который предполагает включение переменных в нотацию class
, так или иначе? Если да, то каков был предложенный синтаксис, где он был опубликован, где он обсуждался, как проходила дискуссия и каково нынешнее положение дел на этом фронте? Как бы то ни было, на этот вопрос нельзя ответить, если такое обсуждение не обсуждалось ранее, на любом уровне, но я считаю это маловероятным.
Немного фона: в настоящее время я играю с компилятором Google close, выполняющим расширенную компиляцию, используя ES6 в качестве входных данных. Для этого мне нужно место, чтобы поместить аннотации типов для переменных-членов, и я использовал их, используя синтаксис типа /** @type {string} */ MyClass.prototype.arg;
, который является семантическим no-op в ECMAScript, но предоставляет информацию о типе компилятору закрытия nice и легко. Я еще не нашел такой же хороший способ сделать это с помощью конструкции class
. Но если вы хотите рассмотреть этот аспект, это будет комментарий. Вышеупомянутый вопрос касается заявлений участников, которые больше, чем не-ops, так что здесь должен обсуждаться ответ.