Можешь объяснить ключевые различия между синтаксисом ES6 классов и традиционными функциями-конструкторами в JavaScript, включая их поведение при создании экземпляров, перечислимость методов, hoisting, strict mode и механизмы наследования? — ДейлиПреп