// Сначала нужно рассказать,
// что данный контекст должен
// использовать BEM.Sugar.
"use bem";
// Простой синтаксис классов...
class SomeBasicClass {
}
// ...на самом деле все
// классы наследуются от BEM,
// что равносильно BEM.decl...
class SomeBasicClass extends BEM {
}
// ...но могут быть также быть
// классами представления DOM,
// что равносильно BEM.DOM.decl
class SomeViewClass extends BEM.DOM {
}
// Мы можем легко отнаследоваться
// от другого блока...
class SomeExtraClass extends SomeBasicClass {
}
// ...или более в терминах BEM
class SomeExtraClass extends BEM.blocks['some-basic-class'] {
}
// Семантичный синтаксис
// конструктора класса.
class SomeOtherClass {
constructor(data) {
this._someData = data;
}
myMethod(arg) {
this._n = 100 + 57;
}
}
// Выражения вызова родительского метода
class SomeNewOtherClass extends SomeOtherClass {
constructor(mods,params) {
super;
this._someData = [ 3, 4 ];
}
myMethod(arg) {
super(a);
}
}
// Модификаторы
class SomeNewOtherClass_someMode_withValue extends SomeOtherClass {
}
// Удобный синтаксис статических методов
class SomeStaticClass {
static makeEverybodyHappy() {
return 'hapiness';
}
}
// Модификаторы.
class SomeModClass {
set state(value) {
console.log('hi!');
}
}
// И еще...
class SomeClass {
eventsBinder () {
// Биндинг с сохранением контекста
this.elem('someElem').bind('click',() => {
this._onClick();
});
}
_onClick () {
// Строки-шаблоны
var myVar = 'String Templator';
console.log(`Say hello for ${myVar}!`);
}
// Параметры по-умолчанию
myMethod( someArgument = 'with default value' ) {
}
// Остаточные аргументы
myMethod2 ( arg1, ...otherArgs ) {
if ( otherArgs.length > 0 ) {
console.log('Spread!');
}
}
// Деструктивное присваивание
destructingAssigment() {
var [m, d, y] = [3, 14, 1977];
//var m = 3, d = 14, y = 1977;
// удобный обмен значениями
x = 3; y = 4; [x, y] = [y, x]
//temp = [y, x]; x = temp[0]; y = temp[1];
}
// Уже в вашей IDE!
getIDESupport() {
return [
'WebStorm 5+',
'Sublime 3+',
'Vim ?'
];
}
}