> JavaScript classes, introduced in ECMAScript 2015, are primarily syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax does not introduce a new object-oriented inheritance model to JavaScript.
[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
I found the ES6 classes to be very helpful in conceptualizing stuff. When I started playing with them I’ve built myself a demo https://codepen.io/ronilan/pen/PObzew as a clone of same done previously in Ruby. Then I found classes to be very useful for bigger “vanilla” projects (https://github.com/ronilan/BlockLike)
I’d call them “syntactical vitamins”.
I would argue that, more often than not, it is, and it becomes less healthy the more of it you have.
Javascript, for all its faults, is syntactically a simple language and it should have been kept that way.
My favourite subtle distinction is that methods are not constructors—this is true of object shorthand as well.
You were taught that these two were equivalent?
var x = { foo() {} };
var x = { foo: function() {} };
Try this on each: new x.foo
The second definition works, but the first fails because x.foo is not a constructor. This has actually caught me, in a codebase with an old-style Class() creator (and no, `class` is not quite a suitable replacement there, at this stage, for reasons I won’t go into). `Class({ init: function(){} })` would work fine, but `Class({ init() {} })` would yield an uninstantiable class—except that the result was being fed through Bublé, which reinstated the `: function` for old browsers’ sake. So it was only when I removed Bublé from the pipeline that it blew up!(To demonstrate this same point in ES6 classes, `new (new class { foo() {} }).foo` will fail.)