Pro JavaScript Design Patterns: The Essentials of Object-Oriented JavaScript Programming