In programming, inheritance refers to passing down characteristics from a parent to a child so that a new piece of code can reuse and build upon the features of an existing one. JavaScript implements inheritance by using Objects. Each Object has an internal link to another Object called its prototype. That prototype Object has a prototype of its own, and so on until an Object is reached with null as its prototype. By definition, null has no prototype and acts as the final link in this prototype chain. It is possible to mutate any member of the prototype chain or even swap out the prototype at runtime, so concepts like static dispatching do not exist in JavaScript....will avoid using obj.__proto__ but use obj.[[Prototype]] instead...corresponds to Object.getPrototypeOf(obj) . It should not be confused...