JavaScript constructors, prototypes, and the 'new' keyword