java script - object-oriented programming

22
JavaScript Object-Oriented Programming Piotr Czajkowski [email protected]

Upload: blstream

Post on 18-Jul-2015

305 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Java Script - Object-Oriented Programming

JavaScriptObject-Oriented Programming

Piotr [email protected]

Page 2: Java Script - Object-Oriented Programming

constructornewthisbindclass

Page 3: Java Script - Object-Oriented Programming

constructor declaration

var Person = function (name) {this.name = name;

};

Person.prototype.sayHi = function () {return "Hi, I'm " + this.name;

};

var me = new Person("Piotr");me.sayHi(); // “Hi I'm Piotr”

Page 4: Java Script - Object-Oriented Programming

constructor inheritance

var Programmer = function (name, language) {Person.call(this, name);this.language = language;

}

Programmer.prototype = Object.create(Person.prototype);Programmer.prototype.constructor = Programmer;

Page 5: Java Script - Object-Oriented Programming

constructor prototype chain

var Car = function () {this.name = "Car";

}

var Truck = function () {};

Truck.prototype = new Car();

var t = new Truck();t; // Object { name="Car"}

t.name; // "Car"t.hasOwnProperty("name"); // false

t.name = "Truck";t.hasOwnProperty("name"); // true

Page 6: Java Script - Object-Oriented Programming

constructor Object.defineProperty()

Object.defineProperty(obj, "name", {configurable : false,enumerable : false,// data descriptorswritable: false,value : "Object value",// accessor descriptorsget : function () {},set : function (val) {}

});

var o = {};Object.defineProperty(o, "name", {

value : "Object O"});

o.name; // Object O

o.name = "New name";o.name; // Object O

Page 7: Java Script - Object-Oriented Programming

new creating objects

var Person = function (name) {this.name = name;

};

var me = new Person("Piotr");

me.name; // “Piotr”

var me = Person("Piotr");

me; // undefinedwindow.name; // “Piotr”

Page 8: Java Script - Object-Oriented Programming

new instanceof

var Person = function () {this.name = “Person”;

};var p = new Person();

p instanceof Person; // true

"Hello" instanceof String; // false

new String("Hello") instanceof String; // true

Page 9: Java Script - Object-Oriented Programming

new creating objects

var Person = function () {this.name = “Person”;

};

var p = new Person();

p.name; // “Person”p instanceof Person; // true

var Person = function () {return {

name : “Person”};

};var p = new Person();

p.name; // “Person”p instanceof Person; // false

Page 10: Java Script - Object-Oriented Programming

this function context

function getThis() { return this; }

getThis(); // window

var o = { name : "Object O" };o.getThis = getThis;

o.getThis();// Object { name="Object O", getThis=getThis()}

var o = { name : "Object O", getThis : function () { return this;}

};

o.getThis(); // Object

var getThis = o.getThis;getThis(); // window

Page 11: Java Script - Object-Oriented Programming

this inner functions

var o = {innerThis : function () {

function getThis () { return this; }; return getThis();

}};o.innerThis(); // window

Page 12: Java Script - Object-Oriented Programming

this strict mode

function getThis () {"use strict";return this;

};

getThis(); // undefined

var o = {innerThis : function () {

"use strict"; function getThis () { return this; }; return getThis();

}};o.innerThis(); // undefined

Page 13: Java Script - Object-Oriented Programming

bind changing function context

var o = { name : "Object O" };function getThis () { return this; };

getThis(); // window

var boundGetThis = getThis.bind(o);

boundGetThis(); // Object { name="Object O"}

var o = { name : "Object O" };function getThis() { return this; }

getThis(); // window

o.getThis = getThis;

o.getThis();// Object { name="Object O", getThis=getThis()}

Page 14: Java Script - Object-Oriented Programming

bind callbacks (self, that, _this)

var o = {fetch : function () {

function getThis () { console.log(this); };

$.ajax({ url : "url" }).done(getThis);

}};o.fetch(); // ajax settings object

var o = {fetch : function () {

function getThis () { console.log(this); };

$.ajax({ url : "url" }).done(getThis.bind(this));

}};o.fetch(); // Object { fetch=function() }

Page 15: Java Script - Object-Oriented Programming

bind to bind or not to bind

function onClick () {console.log("Click");

};

$("body").on("click", onClick);$("body").trigger("click"); // “Click”

$("body").off("click", onClick);$("body").trigger("click");

function onClick () {console.log("Click");

};

$("body").on("click", onClick.bind());$("body").trigger("click"); // “Click”

$("body").off("click",???);

Page 16: Java Script - Object-Oriented Programming

ES6 class syntactic sugar

class Person {constructor(name) {

this.name = name; }

describe() { return this.name;

}}

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

Person.prototype.describe = function () {

return this.name;};

Page 17: Java Script - Object-Oriented Programming

ES6 class inheritance

class Employee extends Person {constructor(name, title) {

super.constructor(name); this.title = title;

}}

function Employee(name, title) { Person.call(this, name); this.title = title;}

Employee.prototype = Object.create(Person.prototype);

Employee.prototype.constructor = Employee;

Page 18: Java Script - Object-Oriented Programming

ES6 Object Literal Property Value Shorthand

var a = "Test", b = 42, c = {};

var oldObj = {a : a,b : b,c : c

};var es6Obj = { a, b, c };

var name = “Object”;

var o = {name,get name() {},set name(value) {},getThis() { return this; },

};

Page 19: Java Script - Object-Oriented Programming

ES6 Computed Property Names

var i = 0,param = “name”;

var obj = {[param] : “Object O”,[“value” + ++i] : i,

};

var obj = {};obj[param] = “Object O”;obj[“value” + ++i] = i;

Page 20: Java Script - Object-Oriented Programming

ES6 Arrow Functions

var foo = () => { return this; };foo(); // window

var bar = () => {“use strict”; return this;

};bar(); // window

var o = {fetch : function () { $.ajax({ url : "url" })

.done(() => {console.log(this);

});}

};o.fetch(); // Object { fetch=function() }

Page 21: Java Script - Object-Oriented Programming

constructornewthisbindclass

Page 22: Java Script - Object-Oriented Programming

Thank You

Piotr [email protected]