JavaScript Prototypes Explained: Prototype Inheritance, Chaining, and