// Сначала нужно рассказать, // что данный контекст должен // использовать 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 ?' ]; } }