Вы можете воспользоваться преимуществами Javascript clojures, но у вас должно быть немного другое поведение: вы не можете определить класс глобально (AFAIK), но вы можете вернуть его.
Итак, использование станет:
const Node = createClass(...)
const node = new Node();
Чтобы получить этот результат, метод createClass должен вернуть новое определение класса:
function createClass(options) {
return class {
constructor() {
Object.assign(this, options.data, options.methods)
}
}
}
Теперь вы можете сделать что-то вроде:
const node = new Node();
node.translate(10, 15)
console.log(node.x) // 10
node.translate(13, 15)
console.log(node.x) // 23
Кстати, в ES6 метод createClass
может стать действительно замечательным, на мой взгляд:)
const createClass = ({ data, methods }) =>
class {
constructor() {
Object.assign(this, data, methods)
}
}