Practical Design Patterns in JavaScript