Skip to main content

JS-OOP

Prototypes

Prototype is used for having all properties of another object.

__proto__

Constructor Functions

function Employee(_name, _age, _designation){
// Properties assignment passed as arguments
this.name = _name;
this.age = _age;
this.designation = _designation;
// Method
this.setAge = newage => {
console.log(`setting age from ${this.age} to ${newage}`)
this.age = newage;
}
// Property assigned by constructor function
this.company = 'Amazon';
}

var employee1 = new Employee('Mark', 12, 'Manager'); // create Employee objec

Classes

class Employee{
constructor(_name, _age, _designation){
this.name = _name;
this.age = _age;
this.designation = _designation;
// Method
this.setAge = newage => {
console.log(`setting age from ${this.age} to ${newage}`)
this.age = newage;
}
// Property assigned by constructor function
this.company = 'Amazon';
}
// Methods defined outside the constructor
printAge(){
console.log(`${this.name} is ${this.age} years old`);
}

// static method
static compareAge(employee_1, employee_2){
return employee_1.age - employee_2.age;

}

var employee1 = new Employee('Mark', 12, 'Manager'); // create Employee objec

Data Projection: internal variables

Hiding properties in a constructor

function Employee(name, age, designation){
// Properties assignment passed as arguments
this.name = name;
var _age = age;
this.designation = designation;
// Method
this.setAge = newage => {
console.log(`setting age from ${_age} to ${newage}`)
_age = newage;
}
this.printAge = () => {
console.log(`${this.name} is ${_age} years old`);
}
// Property assigned by constructor function
this.company = 'Amazon';

Hiding properties in a class

class Employee{
constructor(name, age, designation){
// Properties assignment passed as arguments
this.name = name;
var _age = age;
this.designation = designation;
// Method
this.setAge = newage => {
console.log(`setting age from ${_age} to ${newage}`)
_age = newage;
}
this.printAge = () => {
console.log(`${this.name} is ${_age} years old`);
}
// Property assigned by constructor function
this.company = 'Amazon';
}
// Methods defined outside the constructor

}

Inheritance

An object’s ability to inherit properties of another object through manipulating the prototype property is called prototypal inheritance.

let vehicle = { wheels : 4 }; // object assigned to variable named vehicle
let car = {
seats : 5,
__proto__ : vehicle // __proto__ property assigned to vehicle
}; // object assigned to variable named car
let bmw = {
price : 50000,
owner : "Bob",
__proto__ : car, // __proto__ property assigned to car (inherits car)
};// object assigned to variable named bm

Constructor function with The call method and prototypal chaining

function Human(_name,_age){
// Properties assignment passed as arguments
this.name = _name;
this.age = _age;
// Property assigned by constructor function
this.arms = 2;
this.legs = 2;
}

function Employee(_name, _age, _designation){
// Properties assignment passed as arguments
Human.call(this, _name, _age);
this.designation = _designation;
// Method
this.setAge = newage => {
console.log(`setting age from ${this.age} to ${newage}`)
this.age = newage;
}
// Property assigned by constructor function
this.company = 'Amazon';
}
Employee.prototype = Object.create(Human.prototype); // assign human prototype
Employee.prototype.constructor = Employee; // create constructor property

var employee1 = new Employee('Mark', 20, 'Manager'); // create Employee object
// create new property in the prototype object for all objects to inherit
Employee.prototype.gender = 'male';
Human.prototype.feet = 2;
// print objects
console.log(employee1.name, ' is ', employee1.gender);
console.log(employee1.name, ' is ', employee1.age);
console.log(employee1.name, ' has ', employee1.arms, ' arms');
console.log(employee1.name, ' has ', employee1.feet, ' feet')

classes extends and super

class Human{
constructor (_name,_age){
// Properties assignment passed as arguments
this.name = _name;
this.age = _age;
// Property assigned by constructor function
this.arms = 2;
this.legs = 2;
}
}

class Employee extends Human{
constructor(_name, _age, _designation){
// Properties assignment passed as arguments
// this.name = _name;
// this.age = _age;
super(_name, _age); // use super to use properties from Human class
this.designation = _designation;
// Property assigned by constructor function
this.company = 'Amazon';
}
// Method
setAge(newage){
console.log(`setting age from ${this.age} to ${newage}`)
this.age = newage;
}
}

var employee1 = new Employee('Mark', 20, 'Manager'); // create Employee object
// print objects
console.log(employee1.name, ' is ', employee1.age);
console.log(employee1.name, ' has ', employee1.arms, ' arms');

JSON

JavaScript Object Notation(JSON)

  • parse method: JSON string -> JS object
  • stringify method: object -> JSON string