http://www.ecma-international.org/ecma-262/6.0/#sec-class-definitions
14.5 Class Definitions
Syntax
ClassDeclaration[Yield, Default] :
class BindingIdentifier[?Yield] ClassTail[?Yield]
[+Default] class ClassTail[?Yield]
ClassExpression[Yield] :
class BindingIdentifier[?Yield]opt ClassTail[?Yield]
ClassTail[Yield] :
ClassHeritage[?Yield]opt { ClassBody[?Yield]opt }
ClassHeritage[Yield] :
extends LeftHandSideExpression[?Yield]
ClassBody[Yield] :
ClassElementList[?Yield]
ClassElementList[Yield] :
ClassElement[?Yield]
ClassElementList[?Yield] ClassElement[?Yield]
ClassElement[Yield] :
MethodDefinition[?Yield]
static MethodDefinition[?Yield]
;
NOTE A ClassBody is always strict code.
https://chadaustin.me/2012/12/javascript-new-operator-ecma-262/
http://stackoverflow.com/questions/761905/how-will-ecma-262-ecmascript-5-help-you
https://blog.appdynamics.com/engineering/7-ways-es2015-can-improve-your-javascript-programing/