SlideShare a Scribd company logo
Бирюков Павел,
фронтэнд разработчик
в Артезио

ES 5
Можно, пацаны!
EC5 в браузерах
EC5 в браузерах
Контексты
var x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};
module.getX(); // 81
var getX = module.getX;
getX(); // 9; "this" refers to the global object
Передача контекста
1. Call

var x = 9;
var module = {
x: 81,

getX.call(module, arg1, arg2)

2. Apply

getX: function() {
return this.x;
}

3. Замыкания

getX.apply(module, [arg1, arg2])

};
var getX = module.getX;
Замыкания
var module = function(){
var x = 81;
return {
getX: function(){return x;}
}
}();
var getX = module.getX;
getX(); // 81
ES 5-way
var x = 9;
var module = {
x: 81,
getX: function() { return this.x; }
};
var getX = module.getX.bind(module);

Почему мы так не делаем?
ES5. Что нового?
Работа со свойствами
Object.create Object.keys
Object.seal
Object.freeze
Function.bind
Strict mode
Getter, Setter Immutable undefined
Object.getPrototypeOf JSON
ES5. Что нового?
[].

indexOf
lastIndexOf
every
some
forEach

map
filter
reduce
reduceRight
Методы в Array
•
•
•
•

Новые
Красивые
Быстрые
В прототипе
Эмуляция ES5
•
•
•
•

ES5-shims
Underscore
Lo-Dash
…
ФП. Что мы умеем
• Генерирование списков
• Обработка списков
(Фибоначчи, проверка на простоту,
список простых чисел, факторал, поиск)
Генерирование
последовательностей
>
Array(2)
Array(2).map((x, i) => i)
Array.apply(0, Array(2))
// @see 15.3.4.3
Array.apply(0,{length:2})

...
[undefined x 2]
[undefined x 2]
[undefined, undefined]
[undefined, undefined]
Генерирование [0...n]
Array
.apply(0, {length: 10})
.map(function(v, i){ return i })
Генерирование [0...n]

Всегда есть способ лучше
Генерирование [0...n]
Array
.apply(0, {length: 10}) // Ok
.map(Function.call, Number)//o_0
Function.call в контексте Number, с
аргументами (value, index, obj)
Function.call.call(Number, v, i, o)
Генерирование [0...n]
Function.call.call(Number, v, i, o)
// global context
Function.call(v, i, o)
// context: Number, v: undefined
// @see 15.3.4.3, 15.3.4.4
Number.call(i, o)
Список простых чисел
function primeList(N) {
return Array.apply(0, Array(N))
.map(function (x, y) { return y })
.filter(function (i) { return (i > 1) && Array.apply(0, Array(1 +
~~Math.sqrt(i)))
.every(function (x, y) { return (y < 2) || (i % y !== 0) });
});
}
Факториал!
function factorial(n) {
return Array.apply(0, Array(n))
.reduce(function(x, y, z) { return x*(z+1) }, 1) }
Фибоначчи
function fibo(n) {
return Array.apply(0, Array(n)
.reduce(function(x, y, z){
return x.concat((z < 2) ? z : x[z-1] + x[z-2])
}, []);
}
Зачем?
•
•
•
•

Зачем я сюда пришел?
Для чего это нужно?
Сколько стоит?
Стоит ли так ухищряться?
Спасибо за внимание

--------Best regards,
P. Birukov

More Related Content

PDF
5.1 Перегрузка операторов
PPTX
DSLs in Lisp and Clojure
PDF
3.3 Конструкторы и деструкторы
PDF
4.3 Виртуальные методы
PDF
4.2 Перегрузка
PDF
C++ exceptions
PDF
Догнать и перегнать boost::lexical_cast
5.1 Перегрузка операторов
DSLs in Lisp and Clojure
3.3 Конструкторы и деструкторы
4.3 Виртуальные методы
4.2 Перегрузка
C++ exceptions
Догнать и перегнать boost::lexical_cast

What's hot (20)

PPTX
Григорий Демченко, Универсальный адаптер
PDF
2.2 Стек вызовов
PDF
3.1 Структуры
PDF
хитрости выведения типов
PDF
2.8 Строки и ввод-вывод
PDF
Parallel STL
PDF
Антон Полухин, Немного о Boost
PDF
5.4 Ключевые слова static и inline
PPTX
Фитнес для вашего кода: как держать его в форме
PDF
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
PDF
ITCrowd - Метапрограммирование
PPTX
Павел Беликов, Как избежать ошибок, используя современный C++
PPT
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
PPTX
Аскетичная разработка браузера
PPTX
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
PDF
Concepts lite
PDF
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
PPTX
Григорий Демченко, Асинхронность и неблокирующая синхронизация
PPT
трасировка Mpi приложений
PDF
JPoint 2015 - Javassist на службе Java-разработчика
Григорий Демченко, Универсальный адаптер
2.2 Стек вызовов
3.1 Структуры
хитрости выведения типов
2.8 Строки и ввод-вывод
Parallel STL
Антон Полухин, Немного о Boost
5.4 Ключевые слова static и inline
Фитнес для вашего кода: как держать его в форме
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.
ITCrowd - Метапрограммирование
Павел Беликов, Как избежать ошибок, используя современный C++
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Аскетичная разработка браузера
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...
Concepts lite
Как перестать отлаживать асинхронный код и начать жить / Андрей Саломатин (Pr...
Григорий Демченко, Асинхронность и неблокирующая синхронизация
трасировка Mpi приложений
JPoint 2015 - Javassist на службе Java-разработчика
Ad

Viewers also liked (20)

PPTX
Async Module Definition via RequireJS
PDF
Как и зачем мы тестируем UI
PDF
Bootstrap3 basics
PDF
devOWL coffee-break
PPT
AngularJS basics & theory
PPT
Потоковая репликация PostgreSQL
PPTX
Database reverse engineering
PPTX
Easily create apps using Phonegap
PPTX
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
PPTX
Startup tactics for developers: A, B, C
PPTX
HR VS DEV
PPTX
Lucene in Action
PPTX
Testing is coming
PPTX
SEO basics for developers
PDF
Miscosoft Singularity - konkurs presentation
PDF
Reactивная тяга
PPTX
Как оценить время на тестирование. Александр Зиновьев, Test Lead Softengi
PDF
CQRS and EventSourcing
PDF
Что такое современная Frontend разработка
PDF
Cага о сагах
Async Module Definition via RequireJS
Как и зачем мы тестируем UI
Bootstrap3 basics
devOWL coffee-break
AngularJS basics & theory
Потоковая репликация PostgreSQL
Database reverse engineering
Easily create apps using Phonegap
Trainspotting Transporting: RabbitMQ, Akka.NET, Rx, MVI, Cycle.js
Startup tactics for developers: A, B, C
HR VS DEV
Lucene in Action
Testing is coming
SEO basics for developers
Miscosoft Singularity - konkurs presentation
Reactивная тяга
Как оценить время на тестирование. Александр Зиновьев, Test Lead Softengi
CQRS and EventSourcing
Что такое современная Frontend разработка
Cага о сагах
Ad

Similar to ECMAScript 5 Features (20)

PDF
Обзор ES2015(ES6)
PDF
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
PDF
Михаил Давыдов — JavaScript: Базовые знания
PDF
Асинхронный JavaScript
PDF
Внутреннее устройство и оптимизация бандла webpack
PPTX
PHP basic
PPTX
Funny JS #2
PDF
Михаил Давыдов - JavaScript. Базовые знания
PDF
Михаил Давыдов - Транспорт, ajax
PDF
JavaScript. Loops and functions (in russian)
PDF
DevConf. Дмитрий Сошников - ECMAScript 6
PDF
Что нового в Perl 5.14
PDF
Ecma script 6 in action
PDF
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
PDF
Groovy presentation.
PPT
Groovy On Grails
PDF
Опыт разработки эффективного SPA
PDF
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
PPTX
course js day 2
PDF
Обзор ES2015(ES6)
Стажировка 2016-07-14 02 Евгений Тарасенко. JavaScript
Михаил Давыдов — JavaScript: Базовые знания
Асинхронный JavaScript
Внутреннее устройство и оптимизация бандла webpack
PHP basic
Funny JS #2
Михаил Давыдов - JavaScript. Базовые знания
Михаил Давыдов - Транспорт, ajax
JavaScript. Loops and functions (in russian)
DevConf. Дмитрий Сошников - ECMAScript 6
Что нового в Perl 5.14
Ecma script 6 in action
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Groovy presentation.
Groovy On Grails
Опыт разработки эффективного SPA
"CommonJS для браузера", Антон Шувалов, MoscowJS 15
course js day 2

ECMAScript 5 Features