JavaScript Prototype Chain Explained
This is not an explanation of TC39 specs, just a javascript implementation perspective.
Terms
The Objects
An object is a data structure that contains data and methods, the null and Primitive are not object.
The Constructors
The Constructors itself are callable objects, every constructors have a constructor method site on the prototype properties, it will be called when initializes object. the constructor default constructor method points to itself.
function Klass() {
this.name = 'a';
}
const a = new Klass();
a.constructor === Klass;
a.name === 'a';
The Prototype
Every objects has a prototype, it can be found by Object.getPrototypeOf, Every objects has a root prototype which is Object.prototype.
function Klass() {
this.name = 'a';
}
function klassConstructor() {
this.name = 'b'
};
Klass.prototype.constructor = klassConstructor;
const a = new Klass();
a.constructor === klassConstructor;
a.name === 'b';
if a object’s prototype is not an object, the new operator will set the prototype property of obj to the standard built-in Object prototype object.
function Foo(){}
Foo.prototype = null;
Object.getPrototypeOf(new Foo()) === Object.prototype;
new Foo().constructor === Object;
The prototype property
The prototype property is used to initializes the __proto__ property of it’s instance.(prototype pattern)
The prototype chain
Every objects have a ___proto__ property, any data or methods defined on __proto__ can be shared for that object. if object was initialized by new Constructor() or Object.create(Argument), it’s __proto__ property is an equivalent of it’s constructor’s prototype property or Argument.