Инициализация свойств непосредственно на классе в ES6 - not possible, только m В настоящее время этады могут быть объявлены таким образом. В ES7 действуют те же правила.
Однако это предлагаемая функция, которая может возникнуть после ES7 (в настоящее время на этапе 3). Вот official proposal.
Кроме того, синтаксис это предложение предлагает slightly different (=
вместо :
):
class Point {
// Declare class property
a = 22
// Declare class static property
static b = 33
}
Если вы используете Бабель, вы можете использовать этап 3 настройки, чтобы включить эту функцию.
Here's a Babel REPL example
Другой способ сделать это в ES6, кроме как в конструкторе, чтобы сделать это после определения класса:
class Point {
// ...
}
// Declare class property
Point.prototype.a = 22;
// Declare class static property
Point.b = 33;
Вот good SO Thread погружение в эту тему некоторые дополнительные данные
Нет т.е:
Как Берги упоминаются в комментариях, предложенный синтаксис:
class Point {
// Declare class property
a = 22
}
просто синтаксический сахар, чтобы обеспечить ярлык для этого кода:
class Point {
constructor() {
this.a = 22;
}
}
Где оба этих операторы присваивают свойство экземпляру .
Однако, это не совсем то же самое, как и присвоение прототипу:
class Point {
constructor() {
this.a = 22; // this becomes a property directly on the instance
}
}
Point.prototype.b = 33; // this becomes a property on the prototype
Оба будут по-прежнему будут доступны через экземпляр:
var point = new Point();
p.a // 22
p.b // 33
Но получение b
потребует восходя прототип цепи, а a
доступен прямо на объекте.
Я думаю, что вы может использовать 'static get x() {return 5; } ', который заканчивается тем же, просто довольно многословным. – somethinghere