Object Oriented JavaScript An Introduction - Manoj Nama
Object Oriented JavaScript An Introduction - Manoj Nama
Agenda ● Functions ● Objects ● Prototypal Inheritance ● Callbacks & Closures ● Async Programming ● Some Exercises
Functions ● Functions are first class members of JavaScript ● They can be used just like variables function someFunction(arg1, arg2) { return arg1 + arg2; }
Functions ● JavaScript has Function scope, i.e only Functions define the scope and nothing else ● A function has access to all the variables and methods in the scope in which it is defined Example
Call & Apply ● Call/Apply both are used to call a function with the ability to change the this reference ● Only difference between the two is syntax ○ Call takes arguments as a list functionName.call(obj, arg1, arg2); ○ Apply takes an array of Arguments functionName.apply(obj, [arg1, arg2]); Example
Objects ● In JavaScript almost everything is an Object ● Multiple ways to create an Object ○ Object Constructor var obj = new Object() ○ Object Literal var obj = {} ○ Inbuilt Method var obj = Object.create() ○ Constructor function var obj = new Person() Example
Constructor Function ● Constructor function is similar to the notation of a Class function Person(name, age) { this.name = name; this.age = age; } Example
Prototypes ● Objects inheriting from other Objects ● Prototype is an object used to construct new objects ● we can assign properties to prototypes to inherit them Prototypes are used with Constructor Functions
Prototypal Chain ● All Objects inherit from Object class ● If certain property is not available on current object, it is looked on prototype, then Parent’s prototype and so on … until the property or null is found o → o.prototype → … → Object.prototype → null
Inheritance ● Inheriting properties and methods ● Prototypes are used for inheritance ● Two ways ○ Inherit from Constructor Functions (Class) ○ Inherit from another Objects Example
Callbacks ● Callbacks are basically functions passed on as arguments to another operation ● This allows us to cope with Asynchronous nature of JavaScript ● We don’t have to block the browser for results Example
Closures ● Very important due to Async nature of JavaScript ● Closures are basically functions which capture the surrounding scope ● The variables remain bound to the scope even when the initiator returns Example
Async Programming ● Callbacks really help in maintaining the sanity in Asynchronous operations ● But, what if there are huge no of async operations depending on each other, nested inside each other.. ● This is referred to as Callback hell..
Callback Hell asyncOp1(function(result) { asyncOp2(function(result1) { asyncOp3(function(result2) { ... asyncOp1476(function(result3) { //phew! got my result }); }); }); });
Async Flow Control ● Callback hell can be avoided by controlling the program flow ● Async.JS is an excellent library to control the callback flow ● Promises Pattern can be very useful with Async Operations
Async Flow Control Example async.parallel([ function(callback) { callback(null, “data”); }, function(callback) { callback(null, “data2”); } ], //optional callback function(err, results) { //results: [“data”, “data2”] }); async.waterfall([ function(callback) { callback(null, “data”); }, function(arg1, callback) { //arg1: “data” callback(null, “data2”); } ], //optional callback function(err, result) { //result: “data2” });
Tips & Tricks ● use + to convert expressions to a number ○ +new Date() gives Timestamp ● use !! to convert any expression to a boolean ● Append array to another array ○ a = [1,2,3]; b= [4,5,6] ○ Array.prototype.push.apply(a,b)
Exercises • Add a loop() method to the Prototype of Array • Implement basic Inheritance with an example of Employee • print numbers 1..5, such that every number is printed after 500ms
Links to Examples • Functions: http://jsfiddle.net/manoj_nama/GE59y/ • Call & Apply: http://jsfiddle.net/manoj_nama/6tLx5/1/ • Objects: http://jsfiddle.net/manoj_nama/Ma9EQ/ • Constructor Function: http://jsfiddle.net/manoj_nama/3Ly4V/1/ • Inheritance: http://jsfiddle.net/manoj_nama/YLUHw/1/ • Callbacks: http://jsfiddle.net/manoj_nama/9vqEf/1/ • Closures: http://jsfiddle.net/manoj_nama/H6nE2/1/ • Promises: http://jsfiddle.net/manoj_nama/R6ZV2/

An introduction to Object Oriented JavaScript

  • 1.
  • 2.
  • 3.
    Agenda ● Functions ● Objects ●Prototypal Inheritance ● Callbacks & Closures ● Async Programming ● Some Exercises
  • 4.
    Functions ● Functions arefirst class members of JavaScript ● They can be used just like variables function someFunction(arg1, arg2) { return arg1 + arg2; }
  • 5.
    Functions ● JavaScript hasFunction scope, i.e only Functions define the scope and nothing else ● A function has access to all the variables and methods in the scope in which it is defined Example
  • 6.
    Call & Apply ●Call/Apply both are used to call a function with the ability to change the this reference ● Only difference between the two is syntax ○ Call takes arguments as a list functionName.call(obj, arg1, arg2); ○ Apply takes an array of Arguments functionName.apply(obj, [arg1, arg2]); Example
  • 7.
    Objects ● In JavaScriptalmost everything is an Object ● Multiple ways to create an Object ○ Object Constructor var obj = new Object() ○ Object Literal var obj = {} ○ Inbuilt Method var obj = Object.create() ○ Constructor function var obj = new Person() Example
  • 8.
    Constructor Function ● Constructorfunction is similar to the notation of a Class function Person(name, age) { this.name = name; this.age = age; } Example
  • 9.
    Prototypes ● Objects inheritingfrom other Objects ● Prototype is an object used to construct new objects ● we can assign properties to prototypes to inherit them Prototypes are used with Constructor Functions
  • 10.
    Prototypal Chain ● AllObjects inherit from Object class ● If certain property is not available on current object, it is looked on prototype, then Parent’s prototype and so on … until the property or null is found o → o.prototype → … → Object.prototype → null
  • 11.
    Inheritance ● Inheriting propertiesand methods ● Prototypes are used for inheritance ● Two ways ○ Inherit from Constructor Functions (Class) ○ Inherit from another Objects Example
  • 12.
    Callbacks ● Callbacks arebasically functions passed on as arguments to another operation ● This allows us to cope with Asynchronous nature of JavaScript ● We don’t have to block the browser for results Example
  • 13.
    Closures ● Very importantdue to Async nature of JavaScript ● Closures are basically functions which capture the surrounding scope ● The variables remain bound to the scope even when the initiator returns Example
  • 14.
    Async Programming ● Callbacksreally help in maintaining the sanity in Asynchronous operations ● But, what if there are huge no of async operations depending on each other, nested inside each other.. ● This is referred to as Callback hell..
  • 15.
    Callback Hell asyncOp1(function(result) { asyncOp2(function(result1){ asyncOp3(function(result2) { ... asyncOp1476(function(result3) { //phew! got my result }); }); }); });
  • 16.
    Async Flow Control ●Callback hell can be avoided by controlling the program flow ● Async.JS is an excellent library to control the callback flow ● Promises Pattern can be very useful with Async Operations
  • 17.
    Async Flow ControlExample async.parallel([ function(callback) { callback(null, “data”); }, function(callback) { callback(null, “data2”); } ], //optional callback function(err, results) { //results: [“data”, “data2”] }); async.waterfall([ function(callback) { callback(null, “data”); }, function(arg1, callback) { //arg1: “data” callback(null, “data2”); } ], //optional callback function(err, result) { //result: “data2” });
  • 18.
    Tips & Tricks ●use + to convert expressions to a number ○ +new Date() gives Timestamp ● use !! to convert any expression to a boolean ● Append array to another array ○ a = [1,2,3]; b= [4,5,6] ○ Array.prototype.push.apply(a,b)
  • 19.
    Exercises • Add aloop() method to the Prototype of Array • Implement basic Inheritance with an example of Employee • print numbers 1..5, such that every number is printed after 500ms
  • 20.
    Links to Examples •Functions: http://jsfiddle.net/manoj_nama/GE59y/ • Call & Apply: http://jsfiddle.net/manoj_nama/6tLx5/1/ • Objects: http://jsfiddle.net/manoj_nama/Ma9EQ/ • Constructor Function: http://jsfiddle.net/manoj_nama/3Ly4V/1/ • Inheritance: http://jsfiddle.net/manoj_nama/YLUHw/1/ • Callbacks: http://jsfiddle.net/manoj_nama/9vqEf/1/ • Closures: http://jsfiddle.net/manoj_nama/H6nE2/1/ • Promises: http://jsfiddle.net/manoj_nama/R6ZV2/