Object.create Understand Object.prototype Understand Prototype chaining Understand Prototype Inheritance with this and new keyword without this and new keyword
var o = Object.create(Object.prototype); An Object is dynamic collection of properties Every properties is key-value pair key is traditionally string, but with WeakMap, it can be any other object.
contain data and methods that act upon that data. Objects can contain other objects. It does not have classes, but it does have constructors which do what classes do, including acting as containers for class variables and methods. It does not have class- oriented inheritance, but it does have prototype-oriented inheritance. By - Douglas Crockford
will look into object, if unable to find, it will look into object.__proto__ , if unable to find, it will look into object.__proto__.proto__ and so on, until it find null. This is call Prototype Chaining
toString __proto__ hasOwnProperty null : : function Object() { [native code] } person name place __proto__ constructor Longer the prototype chain, more the access time Array.prototype push __proto__ map : : employee.tags 1 length __proto__ constructor 0 function Array() { [native cod`e] }
} p2 name place __proto__ constructor Longer the prototype chain, more the access time function Object() { [native cod`e] } p1 name place __proto__ constructor Object.prototype toString __proto__ hasOwnProperty null : :
+" is eating"); } function eat is not part of object “narendra”, this.name When you run, narendra.eat(), eat() function of prototype chain will be executed with Execution Context == narendra, Every function executed with a context, narendra.eat() will be executed with context as “narendra” so inside eat function, value of this will be narendra narendra === this //true person.eat(); // Child of earth is eating person.eat.call(narendra); // Narendra Sisodiya is eating
Car = function(data){ console.dir(this); this.data = data; } var a = new Car(); var b = Car(); WITH NEW var Car = function(data){ //var this = new Object.create(Car.prototype); console.dir(this); this.data = data; // return this } Without new – value of this will be Window object
a = new Car(); var b = Car(); When you invoke constructor with new operator, function will be passed with a THIS variable which inherit from function.prototype