Top Banner
18th of December, 2014 Javascript and OOP The power of simplicity
49
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Steam Learn: Javascript and OOP

18th of December, 2014

Javascript and OOP

The power of simplicity

Page 2: Steam Learn: Javascript and OOP

18th of December, 2014

Outline

● The Javascript object● Adding behaviour● Inheritance without classes● OOP concepts in JS

Page 3: Steam Learn: Javascript and OOP

18th of December, 2014

Outline

● The Javascript object● Adding behaviour● Inheritance without classes● OOP concepts in JS

Page 4: Steam Learn: Javascript and OOP

18th of December, 2014

What is an object ?

var label = { x: 20, y: 23, width: 100, height: 24, text: "Click me!"};

label["x"] === 20;label.y === 23;

Page 5: Steam Learn: Javascript and OOP

18th of December, 2014

What is an object ?

var label = { x: 20, y: 23, width: 100, height: 24, text: "Click me!"};

label["x"] === 20;label.y === 23;

Page 6: Steam Learn: Javascript and OOP

18th of December, 2014

What is an object ?

var label = { x: 20, y: 23, width: 100, height: 24, text: "Click me!"};

label["x"] === 20;label.y === 23;

Page 7: Steam Learn: Javascript and OOP

18th of December, 2014

Create it in a function

function createLabel(x, y, text) { return { x: x, y: y, width: computeWidth(text), height: defaultHeight, text: text };}

var errorLabel = createLabel(20, 23, "There was an error");var successLabel = createLabel(56, 89, "Success");

Page 8: Steam Learn: Javascript and OOP

18th of December, 2014

The constructor function

function Label(x, y, text) { this.x = x; this.y = y; this.width = computeWidth(text); this.height = defaultHeight; this.text = text;}

var errorLabel = new Label(20, 23, "There was an error");

errorLabel.x === 20;

Page 9: Steam Learn: Javascript and OOP

18th of December, 2014

The constructor function

function Label(x, y, text) { this.x = x; this.y = y; this.width = computeWidth(text); this.height = defaultHeight; this.text = text;}

var errorLabel = new Label(20, 23, "There was an error");

errorLabel.x === 20;

Page 10: Steam Learn: Javascript and OOP

18th of December, 2014

The constructor function

function Label(x, y, text) { this.x = x; this.y = y; this.width = computeWidth(text); this.height = defaultHeight; this.text = text;}

var errorLabel = new Label(20, 23, "There was an error");

errorLabel.x === 20;

Page 11: Steam Learn: Javascript and OOP

18th of December, 2014

Outline

● The Javascript object● Adding behaviour● Inheritance without classes● OOP concepts in JS

Page 12: Steam Learn: Javascript and OOP

18th of December, 2014

Adding behaviour

var greeter = { nameToGreet: "Roger",

};

greeter.greet(); // How to do it ?

Page 13: Steam Learn: Javascript and OOP

18th of December, 2014

Adding behaviour

var greeter = { nameToGreet: "Roger",

greet: function () { console.log("Hello " + this.nameToGreet + "!"); }

};

greeter.greet(); // "Hello Roger!"

Page 14: Steam Learn: Javascript and OOP

18th of December, 2014

Adding behaviour

var greeter = { nameToGreet: "Roger",

greet: function () { console.log("Hello " + this.nameToGreet + "!"); }

};

greeter.greet(); // "Hello Roger!"

Page 15: Steam Learn: Javascript and OOP

18th of December, 2014

A word about this...

var greeter = { nameToGreet: "Roger", greet: function () { console.log("Hello " + this.nameToGreet + "!"); }};

var semiGreeter = { nameToGreet: "Bob" };semiGreeter.greet = greeter.greet;

semiGreeter.greet(); // "Hello Bob!"

Page 16: Steam Learn: Javascript and OOP

18th of December, 2014

A word about this...

var greeter = { nameToGreet: "Roger", greet: function () { console.log("Hello " + this.nameToGreet + "!"); }};

var semiGreeter = { nameToGreet: "Bob" };semiGreeter.greet = greeter.greet;

semiGreeter.greet(); // "Hello Bob!"

Page 17: Steam Learn: Javascript and OOP

18th of December, 2014

A word about this...

var greeter = { nameToGreet: "Roger", greet: function () { console.log("Hello " + this.nameToGreet + "!"); }};

var semiGreeter = { nameToGreet: "Bob" };semiGreeter.greet = greeter.greet;

semiGreeter.greet(); // "Hello Bob!"

Page 18: Steam Learn: Javascript and OOP

18th of December, 2014

A word about this...

var greeter = { nameToGreet: "Roger", greet: function () { console.log("Hello " + this.nameToGreet + "!"); }};

var semiGreeter = { nameToGreet: "Bob" };semiGreeter.greet = greeter.greet;

semiGreeter.greet(); // "Hello Bob!"

Page 19: Steam Learn: Javascript and OOP

18th of December, 2014

A word about this...

var greeter = { nameToGreet: "Roger", greet: function () { console.log("Hello " + this.nameToGreet + "!"); }};

var semiGreeter = { nameToGreet: "Bob" };semiGreeter.greet = greeter.greet;

semiGreeter.greet(); // "Hello Bob!"

Page 20: Steam Learn: Javascript and OOP

18th of December, 2014

Outline

● The Javascript object● Adding behaviour● Inheritance without classes● OOP concepts in JS

Page 21: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

Do not have classes ?

Extend objects !

Page 22: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

var baseObject = { name: "baseObject"};

var childObject = { __proto__: baseObject};

childObject.name === "baseObject";

Page 23: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

var baseObject = { name: "baseObject"};

var childObject = { __proto__: baseObject};

childObject.name === "baseObject";

Page 24: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

var baseObject = { name: "baseObject"};

var childObject = { __proto__: baseObject};

childObject.name === "baseObject";

Page 25: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

var baseObject = { name: "baseObject"};

var childObject = { __proto__: baseObject};

childObject.name === "baseObject";

Page 26: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

var baseObject = { name: "baseObject"};

var childObject = { __proto__: baseObject};

childObject.name === "baseObject";

Page 27: Steam Learn: Javascript and OOP

18th of December, 2014

Prototypal inheritance

var baseObject = { name: "baseObject"};

var childObject = { __proto__: baseObject};

childObject.name === "baseObject";

childObject.name = "childObject";childObject.name === "childObject";

Overrides baseObject.name

Page 28: Steam Learn: Javascript and OOP

18th of December, 2014

Prototype with constructor

var baseObject = { name: "baseObject"};

var ChildObject = function () {};ChildObject.prototype = baseObject;

var childObject = new ChildObject();

childObject.name === "baseObject";

Page 29: Steam Learn: Javascript and OOP

18th of December, 2014

Prototype with constructor

var baseObject = { name: "baseObject"};

var ChildObject = function () {};ChildObject.prototype = baseObject;

var childObject = new ChildObject();

childObject.name === "baseObject";

Page 30: Steam Learn: Javascript and OOP

18th of December, 2014

Outline

● The Javascript object● Adding behaviour● Inheritance without classes● OOP concepts in JS

Page 31: Steam Learn: Javascript and OOP

18th of December, 2014

Classes

function Greeter(name) { this.name = name;}

Greeter.prototype = { greet: function () { console.log("Hello " + this.name + "!"); }};

var greeter = new Greeter("Roger");greeter.greet(); // "Hello Roger!"

Page 32: Steam Learn: Javascript and OOP

18th of December, 2014

Classes

function Greeter(name) { this.name = name;}

Greeter.prototype = { greet: function () { console.log("Hello " + this.name + "!"); }};

var greeter = new Greeter("Roger");greeter.greet(); // "Hello Roger!"

Initialize instance

Page 33: Steam Learn: Javascript and OOP

18th of December, 2014

Classes

function Greeter(name) { this.name = name;}

Greeter.prototype = { greet: function () { console.log("Hello " + this.name + "!"); }};

var greeter = new Greeter("Roger");greeter.greet(); // "Hello Roger!"

Methods

Page 34: Steam Learn: Javascript and OOP

18th of December, 2014

Static fields

function Greeter(name) { this.name = name || Greeter.DEFAULT_NAME;}Greeter.DEFAULT_NAME = "Sir";

Greeter.prototype = { // ...};

var greeter = new Greeter();greeter.greet(); // "Hello Sir!"

Page 35: Steam Learn: Javascript and OOP

18th of December, 2014

Inheritance

function AwesomeGreeter(name) { Greeter.call(this, name);}

AwesomeGreeter.prototype = new Greeter();

AwesomeGreeter.prototype.superGreet = function () { this.greet(); console.log("You are awesome!");};

var greeter = new AwesomeGreeter("Chuck");greeter.superGreet(); // "Hello Chuck!" "You are awesome!"

Page 36: Steam Learn: Javascript and OOP

18th of December, 2014

Inheritance

function AwesomeGreeter(name) { Greeter.call(this, name);}

AwesomeGreeter.prototype = new Greeter();

AwesomeGreeter.prototype.superGreet = function () { this.greet(); console.log("You are awesome!");};

var greeter = new AwesomeGreeter("Chuck");greeter.superGreet(); // "Hello Chuck!" "You are awesome!"

Call parent’s constructor

Page 37: Steam Learn: Javascript and OOP

18th of December, 2014

Inheritance

function AwesomeGreeter(name) { Greeter.call(this, name);}

AwesomeGreeter.prototype = new Greeter();

AwesomeGreeter.prototype.superGreet = function () { this.greet(); console.log("You are awesome!");};

var greeter = new AwesomeGreeter("Chuck");greeter.superGreet(); // "Hello Chuck!" "You are awesome!"

Inherit parent’s methods

Page 38: Steam Learn: Javascript and OOP

18th of December, 2014

Inheritance

function AwesomeGreeter(name) { Greeter.call(this, name);}

AwesomeGreeter.prototype = new Greeter();

AwesomeGreeter.prototype.superGreet = function () { this.greet(); console.log("You are awesome!");};

var greeter = new AwesomeGreeter("Chuck");greeter.superGreet(); // "Hello Chuck!" "You are awesome!"

Add new methods

Page 39: Steam Learn: Javascript and OOP

18th of December, 2014

Private fields

function Greeter(name) { this.greet = function () { console.log('Hello ' + name + '!'); };}

var greeter = new Greeter("Roger");greeter.greet(); // "Hello Roger!"console.log(greeter.name); // undefined

Page 40: Steam Learn: Javascript and OOP

18th of December, 2014

Private fields

function Greeter(name) { this.greet = function () { console.log('Hello ' + name + '!'); };}

var greeter = new Greeter("Roger");greeter.greet(); // "Hello Roger!"console.log(greeter.name); // undefined

Define greet as a closure

Page 41: Steam Learn: Javascript and OOP

18th of December, 2014

Private fields

function Greeter(name) { function buildMessage() { return 'Hello ' + name + '!'; }

this.greet = function () { console.log(buildMessage()); };}

var greeter = new Greeter("Roger");greeter.greet(); // "Hello Roger!"console.log(greeter.name); // undefined

Private method

Page 42: Steam Learn: Javascript and OOP

18th of December, 2014

What did we learn ?

With:● Objects

Page 43: Steam Learn: Javascript and OOP

18th of December, 2014

What did we learn ?

With:● Objects● Functions

Page 44: Steam Learn: Javascript and OOP

18th of December, 2014

What did we learn ?

With:● Objects● Functions● Prototypes

Page 45: Steam Learn: Javascript and OOP

18th of December, 2014

What did we learn ?

With:● Objects● Functions● Prototypes

We got:● Classes● Methods● Inheritance● Static fields● Private fields

Page 46: Steam Learn: Javascript and OOP

18th of December, 2014

What did we learn ?

With:● Objects● Functions● Prototypes

We got:● Classes● Methods● Inheritance● Static fields● Private fields

So Javascript is cool !

Page 47: Steam Learn: Javascript and OOP

18th of December, 2014

Questions ?For online questions, please leave a comment on the article.

Page 48: Steam Learn: Javascript and OOP

18th of December, 2014

Join the community !(in Paris)

Social networks :● Follow us on Twitter : https://twitter.com/steamlearn● Like us on Facebook : https://www.facebook.com/steamlearn

SteamLearn is an Inovia initiative : inovia.fr

You wish to be in the audience ? Join the meetup group! http://www.meetup.com/Steam-Learn/