SlideShare a Scribd company logo
new JavaScript;
Самый популярный
№1 на GitHub
загадочный субъективный параметр




                                   время, затраченное на поиск официальной версии логотипа
Самый доступный
В каждом браузере
...и не только
Самый простой
{}
f()
В JavaScript нет

● паттерн-матчинга
● лист компрехеншнов
● континьюэйшнов
● корутин
● монад
● языковой поддержки модулей
● огромной стандартной библиотеки
● классов с названиями типа
  SQLIntegrityConstraintViolationException
● и вообще классов
f()   {}
f() <: {}
Function — это объект
Object — это функция
{}
two   =   2;
yes   =   true;
obj   =   {};
str   =   "hello";
arr   =   [];
nop   =   function () {};
rex   =   /dog/;
now   =   new Date;
new JavaScript
two   =   2;
yes   =   true;
obj   =   {};
str   =   "hello";
arr   =   [];
nop   =   function () {};
rex   =   /dog/;
now   =   new Date;
new
> 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)
> typeof Date()
"string"
> typeof (new Date())
"object"
object.constructor
two.constructor   ==   Number;
yes.constructor   ==   Boolean;
obj.constructor   ==   Object;
str.constructor   ==   String;
arr.constructor   ==   Array;
nop.constructor   ==   Function;
rex.constructor   ==   RegExp;
now.constructor   ==   Date;
function Person(first, last) {
  this.firstName = first;
  this.lastName = last;
}

var bob = new Person('Bob');
bob.firstName; // 'Bob'
> bob.constructor === Person
true
> bob instanceof Person
true
> empty = {}
▸ Object
> empty.constructor
function Object() { ... }
> empty.toString()
"[object Object]"
> empty = {}
▾ Object
   ▾ __proto__: Object
      ...
      ▸ constructor: function...
      ▸ isPrototypeOf: function...
      ▸ toString: function...
      ▸ valueOf: function...
      ...
null
> zen = Object.create(null)
▾ Object
     No Properties
> zen instanceof Object
false
> typeof zen
"object"
person = Object.create(null);
person.fullName = function () {
   return this.firstName + ' '
        + this.lastName;
};

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

bob.sex;        // 'male'
bob.fullName(); // 'bob smith'
> bob
▾ Object
      firstName: "bob"
      lastName: "smith"
   ▾ __proto__: Object
         sex: "male"
      ▾ __proto__: Object
         ▸ fullName: function...
null

person
fullName    function () { ... }

man
sex   "male"

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

var bob = new Person('Bob');
bob.firstName; // 'Bob'
function Person(first, last) {
  this.firstName = first;
  this.lastName = last;
  this.fullName = function () {
    return this.firstName + ' '
         + this.lastName;
  }
}
alice
       firstName      "alice"
       lastName       "jones"
       fullName       function () ...

bob
firstName   "bob"
lastName    "smith"
fullName    function () ...
Constructor.prototype
function Person(first, last) {
  this.firstName = first;
  this.lastName = last;
}

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


                    alice
                    firstName   "alice"
                    lastName    "jones"
bob
firstName   "bob"
lastName    "smith"
f()
Объекты первого класса
function foo() {
  return 'FOO';
}
var bar = foo;
bar(); // 'FOO'
function baz(f) {
  return f();
}

baz(foo); // 'FOO'
function quux() {
  return foo;
}

quux()(); // 'FOO'
var code = 'return "FOO"'

var foo = new Function(code);
foo(); // 'FOO'
Область видимости переменных
var
function fred(x) {
  var a = 10;
  return a * x;
}

var a = 3;
fred(5); // 50
console.log(a); // 3
function fred(x) {
  /*no var*/ a = 10;
  return a * x;
}

var a = 3;
fred(5); // 50
console.log(a); // 10
this
Person.prototype.fullName =
function () {
  return this.firstName + ' '
       + this.lastName;
}

bob = new Person('bob');
bob.fullName();
// 'bob undefined'
xavier = {
   firstName: 'xavier',
   lastName: 'sanchez'
};

xavier.fullName(); // error!
xavier.fullName =
    Person.prototype.fullName;

xavier.fullName();
    // 'xavier sanchez'
Person.prototype
      .fullName
      .call(xavier);
    // 'xavier sanchez'
that
function Logger(s) {
  s.on('data', function (d) {
    this.log(d);
  });
}

Logger.prototype.log =
function (data) {
  console.log(new Date, data);
}
function Logger(s) {
  s.on('data', function (d) {
    this.log(d);
  });
}
function Logger(s) {
  var that = this;
  s.on('data', function (d) {
    that.log(d);
  });
}
function Logger(s) {
  s.on('data',
        Logger.prototype
               .log.bind(this));
}
jifasnif


                       @stevebest
     https://github.com/stevebest

More Related Content

PDF
JavaScript. Loops and functions (in russian)
PDF
Present saint-per3-by-pavel-vlasov
PPT
Groovy On Grails
PDF
Reform: путь к лучшему ORM
PPTX
Funny JS #2
ODP
Программирование Linux
PDF
Decorators' recipes
PPTX
PHP basic
JavaScript. Loops and functions (in russian)
Present saint-per3-by-pavel-vlasov
Groovy On Grails
Reform: путь к лучшему ORM
Funny JS #2
Программирование Linux
Decorators' recipes
PHP basic

What's hot (20)

PDF
Perl – жив?!
ODP
Программирование Linux
PDF
JavaScript. OOP (in russian)
PDF
RDSDataSource: Чистые тесты на Swift
PDF
Cобачники против кинофобов
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
PDF
Блоки, лямбды, замыкания
ODP
Программирование Linux
PDF
Дмитрий Щадей "Зачем и как мы используем jsLint"
PPTX
I tmozg js_school_jquery
PPTX
Funny JS #1
PDF
Интуит. Разработка приложений для iOS. Лекция 3. Views
ODP
Coroutines
PDF
Pyton – пробуем функциональный стиль
PDF
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
PPTX
Парсер: что? зачем? как?
PDF
Почему Mojolicious?
PDF
Парсим CSS
PDF
Приручаем linux-консоль
PDF
Пластилиновый код: как перестать кодить и начать жить
Perl – жив?!
Программирование Linux
JavaScript. OOP (in russian)
RDSDataSource: Чистые тесты на Swift
Cобачники против кинофобов
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Блоки, лямбды, замыкания
Программирование Linux
Дмитрий Щадей "Зачем и как мы используем jsLint"
I tmozg js_school_jquery
Funny JS #1
Интуит. Разработка приложений для iOS. Лекция 3. Views
Coroutines
Pyton – пробуем функциональный стиль
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Парсер: что? зачем? как?
Почему Mojolicious?
Парсим CSS
Приручаем linux-консоль
Пластилиновый код: как перестать кодить и начать жить
Ad

Viewers also liked (9)

PPTX
Windows Azure & NodeJS Microsoft SWIT 2012
PDF
Enterprise Agile
PDF
Проектирование интернет-сайтов и систем в Redsoft
PDF
Timothy N. Tsvetkov, Rails 3.1
PDF
Серверный JavaScript: NodeJS и CouchDB
PPTX
Повышаем отказоустойчивость без дорогих решений
PDF
«Мой сосед Легаси», Сергей Федоров, Evil Martians
PPT
Гибкость и Структурированность Oбъектно Oриентированноя CSS
PDF
Study: The Future of VR, AR and Self-Driving Cars
Windows Azure & NodeJS Microsoft SWIT 2012
Enterprise Agile
Проектирование интернет-сайтов и систем в Redsoft
Timothy N. Tsvetkov, Rails 3.1
Серверный JavaScript: NodeJS и CouchDB
Повышаем отказоустойчивость без дорогих решений
«Мой сосед Легаси», Сергей Федоров, Evil Martians
Гибкость и Структурированность Oбъектно Oриентированноя CSS
Study: The Future of VR, AR and Self-Driving Cars
Ad

Similar to new JavaScript (20)

PPT
ООП в JavaScript
PPT
Подробная презентация JavaScript 6 в 1
PPT
Подробная презентация JavaScript 6 в 1
PDF
Михаил Давыдов — JavaScript: Базовые знания
PDF
JavaScript. Basics (in russian)
PDF
JavaScript Базовый. Занятие 04.
PDF
ES2015+: давно пора!
PDF
Михаил Давыдов - JavaScript. Базовые знания
PDF
Михаил Давыдов - Транспорт, ajax
PDF
Объектное и прототипное программирование в Javascript
PDF
Михаил Давыдов: JavaScript. Базовые знания
PDF
AddConf. Дмитрий Сошников - Будущее ECMAScript
PDF
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
PDF
Ecma script 6 in action
PPTX
OOP in JavaScript - Presentation by Eugene Kalosha
PDF
Обзор ES2015(ES6)
PPT
Javascript
PPTX
Всё ли ты знаешь о JavaScript ООП?
PDF
ECMAScript 6 — будущее JavaScript
PDF
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
ООП в JavaScript
Подробная презентация JavaScript 6 в 1
Подробная презентация JavaScript 6 в 1
Михаил Давыдов — JavaScript: Базовые знания
JavaScript. Basics (in russian)
JavaScript Базовый. Занятие 04.
ES2015+: давно пора!
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - Транспорт, ajax
Объектное и прототипное программирование в Javascript
Михаил Давыдов: JavaScript. Базовые знания
AddConf. Дмитрий Сошников - Будущее ECMAScript
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Ecma script 6 in action
OOP in JavaScript - Presentation by Eugene Kalosha
Обзор ES2015(ES6)
Javascript
Всё ли ты знаешь о JavaScript ООП?
ECMAScript 6 — будущее JavaScript
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript

new JavaScript