Hello All, I would like to explain OOPs concept here which are very useful while using JavaScript for a large project. Object oriented concept in JavaScript is very useful in case you are creating modules in your project. Before starting I would like to cover few basic things about JavaScript. Class in JavaScript is nothing but function. There are 2 ways to create object of a class in JavaScript:
- Using Object.create (Prototypal Model)
- Using new keyword (Classical Model)
Using Object.create (Prototypal Model)
var TilePrototype = {
constructor: function(header,value) {
this._header = header;
this._value = value;
},
render: function(){
// Your code here to create tile using header and value;
}
}
var myTile = Object.create(TilePrototype); // Here you created object of TilePrototype
myTile.constructor("My first tile", "Some value"); // Initialize the value using constructor
myTile.render(); // Call render method to create tile
Now how to achieve inheritance using Object.create
var AdvancedTilePrototype = Object.create(TilePrototype);
AdvancedTilePrototype.render = function(){
TilePrototype.render.call(this);
// add some more advanced functionality here which will be extended including parent class method.
}
// Now any one can create object of this child class
var myAdvancedTile = Object.create(AdvancedTilePrototype);
myAdvancedTile.constructor("My advanced tile","value");
myAdvancedTile.render();
Using new keyword (Classical Model)
function Tile(header,value){
this._header = header;
this._value = value;
}
Tile.prototype.render = function(){
// Your code here to create tile using header and value;
}
var myTile = new Tile("My first tile", "some value"); // create new object of Class Tile
myTile.render(); // Call render method to render tile
Now how to achieve inheritance in this classical model
function AdvancedTile(header, value){
Tile.call(this, header, value);
}
AdvancedTile.prototype = Object.create(Tile.prototype);
AdvancedTile.prototype.constructor = AdvancedTile;
AdvancedTile.prototype.render = function(){
Tile.prototype.render.call(this);
// add your advanced code
}