BEM.Sugar
http://github.com/GREENpoint/bn/

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

    }