var obj = { hello: 'world', id: 1234 }; var obj = new Object(); obj.hello = 'world'; obj.id = 1234; var obj = Object.create(null, { hello: { value: "world" }, id: { value: 1234 } });
var carInstance = { drive: function(direction) { ... }, stop: function() { ... } speed: 65 mileage: 80000 };
function Car() { var wearAndTear = 0; function startEngine() { ... } function turn() { .. } return { drive: function(direction) { ... } stop: function() { ...}, speed: 0, mileage: 0 } }
Create an instance with
var carInstance = Car();
function Car() { var wearAndTear = 0; function startEngine() { ... } function turn() { .. } this.drive = function(direction) { ... }; this.stop = function() { ...}; this.speed = 0; this.mileage = 0; }
Create an instance with
var carInstance = new Car();
A function’s prototype is the object instance that will become the prototype for all objects created using this function as a constructor.
// *** function Object() {} *** Object.prototype --> {} .prototype --> null // What about var obj = new Object()? obj.prototype --> {} .prototype --> null // What about function Array(length) {} ? (Same as Object.prototype) Array.prototype --> {} .prototype --> {} .prototype --> null
var Car = (function() { function Car() { this.speed = 0; this.mileage = 0; // Pseudo private variable this._wearAndTear = 0; } function startEngine() { ... } function turn() { .. } Car.prototype.drive = function(direction) { ... }; Car.prototype.stop = function() { ...}; Car.prototype.speed = 0; Car.prototype.mileage = 0; })();
Create an instance with
var carInstance = new Car();
Build upon what is already available
Prototype, Prototype, Prototype
Our new car
function Truck() { } // Common mistake Truck.prototype = Car.prototype;
What's wrong?
function Truck() { } Truck.prototype = new Car(); Truck.prototype.openTailgate = function() { ... } ...
function inherit(Parent, Child) { function Temp() { this.constructor = Child; } Temp.prototype = Parent.prototype; Child.prototype = new Temp(); }
// Also called extend function mixin(obj, otherObj) { for (var key in otherObj) { obj[key] = otherObj[key]; } }
// Broadcasts events (simple pub/sub) function Broadcaster() {} Broadcaster.prototype.listen = function(event, fn) { ... }; Broadcaster.prototype.broadcast = function(event, data) { ... }; function Car() { extend(this, new Broadcaster()); } Car.prototype.drive = function(direction) { if(obstruction) { this.broadcast('error', { errorMsg: 'Obstruction!'}); } }