Object prototype
Objects may be created in various ways including via a literal notation or via constructors which create objects and then execute code that initialises all or part of them by assigning initial values to their properties. Each constructor is a function that has a property named “prototype” that is used to implement prototype-based inheritance and shared properties. Objects are created by using constructors in new expressions; for example, new Date(2009,11) creates a new Date object. Invoking a constructor without using new has consequences that depend on the constructor. For example, Date() produces a string representation of the current date and time rather than an object.
Every object created by a constructor has an
implicit reference (called the object’s
prototype) to the value of its constructor’s
“prototype” property. Furthermore, a prototype
may have a non-null implicit reference to its
prototype, and so on; this is called the
prototype chain.