new javascript

61
new JavaScript;

Upload: stepan-stolyarov

Post on 25-Jun-2015

230 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: new JavaScript

new JavaScript;

Page 2: new JavaScript

Самый популярный

Page 3: new JavaScript

№1 на GitHub

Page 4: new JavaScript

время, затраченное на поиск официальной версии логотипа

зага

дочн

ый

субъ

екти

вны

й па

рам

етр

Page 5: new JavaScript

Самый доступный

Page 6: new JavaScript

В каждом браузере

Page 7: new JavaScript

...и не только

Page 8: new JavaScript

Самый простой

Page 9: new JavaScript

{}

Page 10: new JavaScript

f()

Page 11: new JavaScript

В JavaScript нет

● паттерн-матчинга● лист компрехеншнов● континьюэйшнов● корутин● монад● языковой поддержки модулей● огромной стандартной библиотеки● классов с названиями типа

SQLIntegrityConstraintViolationException● и вообще классов

Page 12: new JavaScript

f() {}

Page 13: new JavaScript

f() <: {}

Page 14: new JavaScript

Function — это объектObject — это функция

Page 15: new JavaScript

{}

Page 16: new JavaScript

two = 2;yes = true;obj = {};str = "hello";arr = [];nop = function () {};rex = /dog/;now = new Date;

Page 17: new JavaScript
Page 18: new JavaScript

two = 2;yes = true;obj = {};str = "hello";arr = [];nop = function () {};rex = /dog/;now = new Date;

Page 19: new JavaScript

new

Page 20: new JavaScript

> typeof Date"function"> Date()"Wed Oct 17 2012 18:13:52 GMT+0700 (NOVT)"> new Date()Wed Oct 17 2012 18:13:54 GMT+0700 (NOVT)

Page 21: new JavaScript

> typeof Date()"string"> typeof (new Date())"object"

Page 22: new JavaScript

object.constructor

Page 23: new JavaScript

two.constructor == Number;yes.constructor == Boolean;obj.constructor == Object;str.constructor == String;arr.constructor == Array;nop.constructor == Function;rex.constructor == RegExp;now.constructor == Date;

Page 24: new JavaScript

function Person(first, last) { this.firstName = first; this.lastName = last;}

var bob = new Person('Bob');bob.firstName; // 'Bob'

Page 25: new JavaScript

> bob.constructor === Persontrue> bob instanceof Persontrue

Page 26: new JavaScript

> empty = {}▸ Object> empty.constructorfunction Object() { ... }> empty.toString()"[object Object]"

Page 27: new JavaScript

> empty = {}▾ Object ▾ __proto__: Object ... ▸ constructor: function... ▸ isPrototypeOf: function... ▸ toString: function... ▸ valueOf: function... ...

Page 28: new JavaScript

null

Page 29: new JavaScript

> zen = Object.create(null)▾ Object No Properties> zen instanceof Objectfalse> typeof zen"object"

Page 30: new JavaScript

person = Object.create(null);person.fullName = function () { return this.firstName + ' ' + this.lastName;};

man = Object.create(person);man.sex = 'male';

Page 31: new JavaScript

bob = Object.create(man);bob.firstName = 'bob';bob.lastName = 'smith';

bob.sex; // 'male'bob.fullName(); // 'bob smith'

Page 32: new JavaScript

> bob▾ Object firstName: "bob" lastName: "smith" ▾ __proto__: Object

sex: "male" ▾ __proto__: Object

▸ fullName: function...

Page 33: new JavaScript

null

sex "male"

fullName function () { ... }

firstName "bob"

lastName "smith"

person

man

bob

Page 34: new JavaScript

function Person(first, last) { this.firstName = first; this.lastName = last;}

var bob = new Person('Bob');bob.firstName; // 'Bob'

Page 35: new JavaScript

function Person(first, last) { this.firstName = first; this.lastName = last; this.fullName = function () { return this.firstName + ' ' + this.lastName; }}

Page 36: new JavaScript

firstName "bob"

lastName "smith"

fullName function () ...

bob

firstName "alice"

lastName "jones"

fullName function () ...

alice

Page 37: new JavaScript

Constructor.prototype

Page 38: new JavaScript

function Person(first, last) { this.firstName = first; this.lastName = last;}

Person.prototype.fullName =function () { return this.firstName + ' ' + this.lastName;}

Page 39: new JavaScript

firstName "bob"

lastName "smith"

bob

firstName "alice"

lastName "jones"

alice

fullName function () ...

Person.prototype

Page 40: new JavaScript

f()

Page 41: new JavaScript

Объекты первого класса

Page 42: new JavaScript

function foo() { return 'FOO';}

Page 43: new JavaScript

var bar = foo;bar(); // 'FOO'

Page 44: new JavaScript

function baz(f) { return f();}

baz(foo); // 'FOO'

Page 45: new JavaScript

function quux() { return foo;}

quux()(); // 'FOO'

Page 46: new JavaScript

var code = 'return "FOO"'

var foo = new Function(code);foo(); // 'FOO'

Page 47: new JavaScript

Область видимости переменных

Page 48: new JavaScript

var

Page 49: new JavaScript

function fred(x) { var a = 10; return a * x;}

var a = 3;fred(5); // 50console.log(a); // 3

Page 50: new JavaScript

function fred(x) { /*no var*/ a = 10; return a * x;}

var a = 3;fred(5); // 50console.log(a); // 10

Page 51: new JavaScript

this

Page 52: new JavaScript

Person.prototype.fullName =function () { return this.firstName + ' ' + this.lastName;}

bob = new Person('bob');bob.fullName();// 'bob undefined'

Page 53: new JavaScript

xavier = { firstName: 'xavier', lastName: 'sanchez'};

xavier.fullName(); // error!

Page 54: new JavaScript

xavier.fullName = Person.prototype.fullName;

xavier.fullName(); // 'xavier sanchez'

Page 55: new JavaScript

Person.prototype .fullName .call(xavier); // 'xavier sanchez'

Page 56: new JavaScript

that

Page 57: new JavaScript

function Logger(s) { s.on('data', function (d) { this.log(d); });}

Logger.prototype.log =function (data) { console.log(new Date, data);}

Page 58: new JavaScript

function Logger(s) { s.on('data', function (d) { this.log(d); });}

Page 59: new JavaScript

function Logger(s) { var that = this; s.on('data', function (d) { that.log(d); });}

Page 60: new JavaScript

function Logger(s) { s.on('data', Logger.prototype .log.bind(this));}

Page 61: new JavaScript

@stevebesthttps://github.com/stevebest

jifasnif