Migrated from: https://wikimedia.mingle.thoughtworks.com/projects/multimedia/cards/276
It is an OOP best practice to have simple constructors which only do trivial things, and have a separate initializaton function for everything else. That way, it is easy to change where objects are created, so it is easier to do proper dependency injection; also, tests can change or mock the behavior of the init function without having to resort to modification of the prototype.