A vanilla implementation, using ES6 classes which means initializing stuff happens in the constructor.