JS и ES6: доступ к статическим полям из класса

В ES6 приведен следующий пример:

export default class MyStyle extends Stylesheet {
   static Color = {
      mainDark: '#000'
   }
   static Comp = {
      ...
      color: Color.mainDark
   }
}

Как я могу получить доступ к Color.mainDark (статическому полю)?


person Livioso    schedule 11.12.2015    source источник
comment
Вы не можете. Он не определен до закрытия } в последней строке   -  person zerkms    schedule 11.12.2015
comment
в методе, который вы могли бы сделать MyStyle.Color.mainDark.   -  person klaemo    schedule 11.12.2015
comment
Это не ES6. Это какие-то странные экспериментальные (предложенные ES7) инициализаторы свойств.   -  person Bergi    schedule 11.12.2015
comment
@Bergi, это этап-1, так что не так уж и странно :-)   -  person zerkms    schedule 11.12.2015
comment
@zerkms: Странно в том смысле, что мне действительно не нравятся предложенные операторы. Очевидно, выбор оператора присваивания вызывает здесь некоторую путаницу.   -  person Bergi    schedule 11.12.2015


Ответы (2)


Вы можете получить к нему доступ, как и ожидали, однако, насколько я помню, были некоторые проблемы при использовании Babel и немедленном экспорте класса, поэтому экспортируйте после определения класса, если у вас возникли проблемы:

class MyStyle extends Stylesheet {
   static Color = {
      mainDark: '#000'
   }

  someMethod() {
    console.log(MyStyle.Color.mainDark);
  }
}

export default MyStyle;

Вы можете больше узнать о проблеме с Babel в ответе Мэриан на аналогичный вопрос, который предположительно исправлен в Babel 6.2. 1.

person Dominic    schedule 11.12.2015
comment
Есть ли что-то вроде self.Color.mainDark, чтобы можно было не повторять имя класса? - person tonix; 27.04.2020
comment
@Ionix, я так не думаю - person Dominic; 27.04.2020

'use strict';

 class User {
   constructor(firstName, lastName) {
   this.firstName = firstName;
   this.lastName = lastName;
 }

 static createGuest() {
    return new User("guest", "site");
   }
 };

 let user = User.createGuest();

  alert( user.firstName ); // guest

  alert( User.createGuest ); // createGuest ... (function)

И константа:

'use strict';

class Menu {
 static get elemClass() {
   return "menu"
 }
}

alert( Menu.elemClass ); // menu

использовать вызов объекта контекста --- это

ES6 — вызов статического метода внутри класса

person Alex Repeckiy    schedule 11.12.2015