SlideShare a Scribd company logo
Что интересного
нам готовит W3C
Сергей Константинов
Web Standards Days, 7 декабря 2013
Обо мне

– В Яндексе с 2008 года
– Руковожу разработкой
API Яндекс.Карт
– С июля 2013 года являюсь
участником Технической
архитектурной группы W3C
www.w3.org/2001/tag/
– @blogovodoved
В последние годы
появилось много разных
стандартов
Но ядро JavaScript ECMAScript
практически не затронуто
В 2014 всё изменится*
* Если успеем, конечно
Тема дня

– Promises
– Modules
– Service Workers
– @@create
Promises
Promises

Promises (aka Futures) в вебе уже давно
На всякий случай, напомню:
someOperation.then(
successCallback,
errorCalback
);

8
Promises

Существует несколько стандартов Promises:
A, A+, B, KISS, C, D, …
И множество реалиазаций:
Q, jQuery Deferred, Vow, …
(см. http://wiki.commonjs.org/wiki/Promises)

9
Promises

Черновик стандарта DOM Level 4 включает в
себя Promises как примитив языка:
http://dom.spec.whatwg.org/#promises
https://github.com/domenic/promises-unwrapping/blob/master/README.md

10
Promise with resolver

В отличие от большинства существующих
реализаций, в DOM Promises функции
подтверждения и отклонения промиса
отделены от самого промиса и сам промис
неизменяем.

11
Promise with resolver

Vow:
function asyncOperation () {
var p = vow.promise();
…
return p;
}
…
asyncOperation().fulfill('some value');

12
Promise with resolver
Теперь будет так:
function asyncOperation () {
var p = new Promise(
function (resolve, reject) {
…
resolve('some value');
…
});
return p;
}
13
Promises
Используйте промисы для:
– возврата статуса асинхронной операции
file.open('path').then(
function (handle) {
// do something valueable
},
function (error) {
// handle error
}
);
14
Promises

Не используйте промисы для:
– передачи больших объёмов данных,
– как замену событиям.

15
Модули
Модули

Долгое время в JavaScript/ECMAScript не
было никакой модульности.
Это привело к бардаку в global и десяткам
имплементаций (псевдо)модульных систем.
http://wiki.ecmascript.org/doku.php?id=harmony:modules

17
Модули

Теперь вы можете объявлять модули:
module 'math' {
export function sum(x, y) {
return x + y;
}
export var pi = 3.141593;
}

18
Модули

… импортировать модули:
import foo from "foo";
import {sum, pi} from 'math';
import "fs" as fs;
import { draw as drawShape } from 'shape';
import { draw as drawGun } from 'cowboy';
module YUI from 'http://developer.yahoo.com/
modules/yui3.js';

19
Конвейер компиляции модулей

– normalize
– resolve
– fetch
– translate
– link

20
Этап resolve

Вы можете задавать свои правила резолва
имён модулей:
System.ondemand({
"https://yandex.st/jquery/2.4/jquery.module.js": "jquery",
"backbone.js": ["backbone/events", "backbone/model"]
});

21
Этап translate
Вы можете совершать операции над кодом
модуля до его исполнения.
Например, проверить jshint-ом:
import { JSHINT } from "jshint";
import { options } from "app/jshintrc";
System.translate = function (source, options) {
var errors = JSHINT(source, options),
messages = [options.actualAddress];
if (errors) {
throw new SyntaxError(errors);
}
return source;
};
22
Этап translate
Вы можете совершать операции над кодом
модуля до его исполнения.
Например, транслировать CoffeeScript
System.translate = function (source, options) {
if (!options.path.match(/.coffee$/)) {
return;
}
return CoffeeScript.translate(source);
};
23
Этап link

Можно контролировать, что попадёт в модуль
в качестве global, и можно выбрать, что
экспортировать из модуля.
https://gist.github.com/wycats/51c96e3adcdb3a68cbc3

24
Конвейер компиляции модулей

В итоге, мы можем:
– писать и использовать модули;
– написать хук для текущих реализаций
модулей (requirejs, amd);
– написать вообще свой кастомный Loader и/
или отнаследоваться от системного.

25
Конвейер компиляции модулей

Мы не можем из коробки:
– грузить код on demand L

26
Service Workers
(nee Navigation
Controllers)
Service Workers – что это?

– Это возможность для определённого
набора URL домена установить "контроллер",
который будет обрабатывать все запросы с
открытых браузером страниц, матчащихся на
этот набор URL-ов
https://github.com/slightlyoff/ServiceWorker/blob/master/explainer.md

28
Service Worker

Инсталлируем:
navigator.registerServiceWorker(
"/*", "/v1/ctrl.js"
).then(function (serviceWorker) {
console.log("success!");
// Чтобы использовать Service Worker сразу,
// можно выполнить window.location.reload()
});

29
Service Worker – зачем?
Service Worker умеет:
– перехватывать запросы за сетевыми
ресурсами и отвечать на них
this.addEventListener("fetch", callback);

– кэшировать ресурсы
var resources = new Cache(
base + "/assets/v1/base.css"
);

– редиректить запросы
– версионироваться.
30
Service Worker – зачем?
Service Worker имеет доступ:
– ко всем открытым в браузере страницам, на
которые матчится
this.windows.forEach(function (w) {
…
});

– ко всем разедляемым ресурсам:
WebStorage, IndexedDB, cookies, …
31
Service Worker – зачем?

Service Worker научится (?):
– получать push уведомления;
– открывать новые страницы.

32
Магический символ
@@create
Наследование в JS

Как выглядит наследование в JS?
function ChildClass () {
ParentClass.call(this);
}
ChildClass.prototype = new ParentClass();
// На самом деле не так, обычно делают магию
// чтобы не вызывать конструктор ParentClass

34
Наследование в JS

Что происходит при вызове new ChildClass()?
– создаётся пустой объект,
– записывается скрытая ссылка на
ChildClass.prototype, если он есть,
– передаётся в качестве this в функциюконструктор.

35
Наследование в JS

Но этот метод не работает, если в this
должен быть не Object, а другой примитив
языка, например, Array, Date, RegExp, …
// Так не работает
function ChildArray () {
Array.call(this);
}
ChildArray.prototype = new Array();

36
Наследование в JS
Разрешение наследоваться от встроенных
объектов приводит к неразрешимым
противоречиям.
function ChildArray () {
Array.call(this);
Date.call(this);
this.length = 100500;
// И что мы получим в итоге? о_О
}

37
Наследование в JS

К тому же, в большинстве случаев
внутренняя логика встроенных типов
реализованы на C++ из соображений
производительности.

38
Наследование в JS

Решение: отделить создание объекта
(allocation) от его инициализации
(initialization).
Функция-конструктор инициализирует
созданный объект, а вот само создание
спрятано за другой функцией.

39
Наследование в JS
Функция-аллокатор прячется за специальным
символом @@create ("эт-эт-криэйт", ага).
// именно так, без кавычек
// возвращает инстанцию объекта
// для передачи в инициализирующий конструктор
Function[@@create]()

@@create – не единственный специальный
символ, есть ещё несколько полезных штук.
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-language-types-symbol-type

40
Наследование в JS
new ChildClass() теперь эквивалентен вот
такой конструкции:
ChildClass.call(
typeof ChildClass[@@create] != 'undefined' ?
ChildClass[@@create]() :
// Это некоторое упрощение ;)
ObjectCreate(ChildClass.prototype)
);
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-construct-argumentslist

41
Наследование в JS

Обещают поддержку наследования от:
– стандартных типов Array, Date, RegExp;
– TypedArray;
– новых ES6-типов Set, WeakSet, Map,
WeakMap;
– и даже HTMLElement!

42
Наследование в JS

Вот так:
function ChildClass () {
Array.call(this);
}
ChildClass[@@create] = Array[@@create];
ChildClass.prototype = new Array();

43
Главный вопрос:
– Когда?
Обещают весной
Обещают весной
(год не уточняют)
Обещают весной
(год не уточняют)
(но хотя бы при нашей жизни)
Сергей Константинов
Руководитель группы
разработки API Карт
W3C TAG Member

twirl@yandex-team.ru

Спасибо!

More Related Content

PDF
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
PDF
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
PDF
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
PDF
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
PDF
МРТ для данных, Frontend Conf 2016
PDF
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
PDF
Опыт разработки эффективного SPA
PDF
Knockoutjs на примере 2ГИС-Онлайн
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
DUMP-2013 Frontend - Возможности последних WEB-стандартов в API Яндекс.Карт -...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
МРТ для данных, Frontend Conf 2016
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
Опыт разработки эффективного SPA
Knockoutjs на примере 2ГИС-Онлайн

What's hot (20)

PDF
Суперсилы Chrome developer tools
PDF
ДАМП 2015 Екатеринбург
PDF
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
PDF
Изоморфный JavaScript — будущее уже здесь
PDF
Инструменты разные нужны, инструменты разные важны
PPTX
PDF
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
PDF
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
PDF
Making Scalable JavaScript Application
PDF
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
PDF
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
PDF
Внутреннее устройство и оптимизация бандла webpack
PDF
iOS-05_2-UIKit
PDF
Быстро о быстром
PDF
Basis.js – «под капотом»
PDF
Фундаментальные основы разработки под iOS. Павел Тайкало
PDF
Android Development Course in HSE lecture #3
PDF
Компонентный подход: скучно, неинтересно, бесперспективно
PDF
Vue.js - реактивный фронтенд фреймворк для людей
PDF
Frontend весна 2014 лекция 1
Суперсилы Chrome developer tools
ДАМП 2015 Екатеринбург
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Изоморфный JavaScript — будущее уже здесь
Инструменты разные нужны, инструменты разные важны
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Making Scalable JavaScript Application
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
Внутреннее устройство и оптимизация бандла webpack
iOS-05_2-UIKit
Быстро о быстром
Basis.js – «под капотом»
Фундаментальные основы разработки под iOS. Павел Тайкало
Android Development Course in HSE lecture #3
Компонентный подход: скучно, неинтересно, бесперспективно
Vue.js - реактивный фронтенд фреймворк для людей
Frontend весна 2014 лекция 1
Ad

Similar to Сергей Константинов — Что интересного готовит нам W3C (20)

PDF
Баба Яга против!
PDF
Frontend: Путешествие в мир модульных загрузчиков
PDF
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PDF
JavaScript Базовый. Занятие 09.
PDF
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Изоморфные Java script приложения с catberry.js
PDF
webpack: 7 бед - один ответ
PPTX
Node JS проблемы надежности, и пути их решения
PDF
D2D Pizza JS Илья Беда "Куда мы все катимся?"
PPTX
course js day 2
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PDF
Михаил Давыдов "Масштабируемые JavaScript-приложения"
PDF
A.pleshkov
PDF
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
PDF
RequireJS і Magento 2
PDF
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
PDF
Ecma script 6 in action
PPT
Подробная презентация JavaScript 6 в 1
Баба Яга против!
Frontend: Путешествие в мир модульных загрузчиков
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Node.js введение в технологию, КПИ #ITmeetingKPI
JavaScript Базовый. Занятие 09.
"Webpack: 7 бед — один ответ" — Денис Измайлов, MoscowJS 17
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Изоморфные Java script приложения с catberry.js
webpack: 7 бед - один ответ
Node JS проблемы надежности, и пути их решения
D2D Pizza JS Илья Беда "Куда мы все катимся?"
course js day 2
Михаил Давыдов "Масштабируемые JavaScript-приложения"
Михаил Давыдов "Масштабируемые JavaScript-приложения"
A.pleshkov
#7 "Многообещающий JavaScript – Promises" Денис Речкунов
RequireJS і Magento 2
Solit 2014, EcmaScript 6 in Action, Трухин Юрий
Ecma script 6 in action
Подробная презентация JavaScript 6 в 1
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Сергей Константинов — Что интересного готовит нам W3C

  • 1. Что интересного нам готовит W3C Сергей Константинов Web Standards Days, 7 декабря 2013
  • 2. Обо мне – В Яндексе с 2008 года – Руковожу разработкой API Яндекс.Карт – С июля 2013 года являюсь участником Технической архитектурной группы W3C www.w3.org/2001/tag/ – @blogovodoved
  • 3. В последние годы появилось много разных стандартов
  • 4. Но ядро JavaScript ECMAScript практически не затронуто
  • 5. В 2014 всё изменится* * Если успеем, конечно
  • 6. Тема дня – Promises – Modules – Service Workers – @@create
  • 8. Promises Promises (aka Futures) в вебе уже давно На всякий случай, напомню: someOperation.then( successCallback, errorCalback ); 8
  • 9. Promises Существует несколько стандартов Promises: A, A+, B, KISS, C, D, … И множество реалиазаций: Q, jQuery Deferred, Vow, … (см. http://wiki.commonjs.org/wiki/Promises) 9
  • 10. Promises Черновик стандарта DOM Level 4 включает в себя Promises как примитив языка: http://dom.spec.whatwg.org/#promises https://github.com/domenic/promises-unwrapping/blob/master/README.md 10
  • 11. Promise with resolver В отличие от большинства существующих реализаций, в DOM Promises функции подтверждения и отклонения промиса отделены от самого промиса и сам промис неизменяем. 11
  • 12. Promise with resolver Vow: function asyncOperation () { var p = vow.promise(); … return p; } … asyncOperation().fulfill('some value'); 12
  • 13. Promise with resolver Теперь будет так: function asyncOperation () { var p = new Promise( function (resolve, reject) { … resolve('some value'); … }); return p; } 13
  • 14. Promises Используйте промисы для: – возврата статуса асинхронной операции file.open('path').then( function (handle) { // do something valueable }, function (error) { // handle error } ); 14
  • 15. Promises Не используйте промисы для: – передачи больших объёмов данных, – как замену событиям. 15
  • 17. Модули Долгое время в JavaScript/ECMAScript не было никакой модульности. Это привело к бардаку в global и десяткам имплементаций (псевдо)модульных систем. http://wiki.ecmascript.org/doku.php?id=harmony:modules 17
  • 18. Модули Теперь вы можете объявлять модули: module 'math' { export function sum(x, y) { return x + y; } export var pi = 3.141593; } 18
  • 19. Модули … импортировать модули: import foo from "foo"; import {sum, pi} from 'math'; import "fs" as fs; import { draw as drawShape } from 'shape'; import { draw as drawGun } from 'cowboy'; module YUI from 'http://developer.yahoo.com/ modules/yui3.js'; 19
  • 20. Конвейер компиляции модулей – normalize – resolve – fetch – translate – link 20
  • 21. Этап resolve Вы можете задавать свои правила резолва имён модулей: System.ondemand({ "https://yandex.st/jquery/2.4/jquery.module.js": "jquery", "backbone.js": ["backbone/events", "backbone/model"] }); 21
  • 22. Этап translate Вы можете совершать операции над кодом модуля до его исполнения. Например, проверить jshint-ом: import { JSHINT } from "jshint"; import { options } from "app/jshintrc"; System.translate = function (source, options) { var errors = JSHINT(source, options), messages = [options.actualAddress]; if (errors) { throw new SyntaxError(errors); } return source; }; 22
  • 23. Этап translate Вы можете совершать операции над кодом модуля до его исполнения. Например, транслировать CoffeeScript System.translate = function (source, options) { if (!options.path.match(/.coffee$/)) { return; } return CoffeeScript.translate(source); }; 23
  • 24. Этап link Можно контролировать, что попадёт в модуль в качестве global, и можно выбрать, что экспортировать из модуля. https://gist.github.com/wycats/51c96e3adcdb3a68cbc3 24
  • 25. Конвейер компиляции модулей В итоге, мы можем: – писать и использовать модули; – написать хук для текущих реализаций модулей (requirejs, amd); – написать вообще свой кастомный Loader и/ или отнаследоваться от системного. 25
  • 26. Конвейер компиляции модулей Мы не можем из коробки: – грузить код on demand L 26
  • 28. Service Workers – что это? – Это возможность для определённого набора URL домена установить "контроллер", который будет обрабатывать все запросы с открытых браузером страниц, матчащихся на этот набор URL-ов https://github.com/slightlyoff/ServiceWorker/blob/master/explainer.md 28
  • 29. Service Worker Инсталлируем: navigator.registerServiceWorker( "/*", "/v1/ctrl.js" ).then(function (serviceWorker) { console.log("success!"); // Чтобы использовать Service Worker сразу, // можно выполнить window.location.reload() }); 29
  • 30. Service Worker – зачем? Service Worker умеет: – перехватывать запросы за сетевыми ресурсами и отвечать на них this.addEventListener("fetch", callback); – кэшировать ресурсы var resources = new Cache( base + "/assets/v1/base.css" ); – редиректить запросы – версионироваться. 30
  • 31. Service Worker – зачем? Service Worker имеет доступ: – ко всем открытым в браузере страницам, на которые матчится this.windows.forEach(function (w) { … }); – ко всем разедляемым ресурсам: WebStorage, IndexedDB, cookies, … 31
  • 32. Service Worker – зачем? Service Worker научится (?): – получать push уведомления; – открывать новые страницы. 32
  • 34. Наследование в JS Как выглядит наследование в JS? function ChildClass () { ParentClass.call(this); } ChildClass.prototype = new ParentClass(); // На самом деле не так, обычно делают магию // чтобы не вызывать конструктор ParentClass 34
  • 35. Наследование в JS Что происходит при вызове new ChildClass()? – создаётся пустой объект, – записывается скрытая ссылка на ChildClass.prototype, если он есть, – передаётся в качестве this в функциюконструктор. 35
  • 36. Наследование в JS Но этот метод не работает, если в this должен быть не Object, а другой примитив языка, например, Array, Date, RegExp, … // Так не работает function ChildArray () { Array.call(this); } ChildArray.prototype = new Array(); 36
  • 37. Наследование в JS Разрешение наследоваться от встроенных объектов приводит к неразрешимым противоречиям. function ChildArray () { Array.call(this); Date.call(this); this.length = 100500; // И что мы получим в итоге? о_О } 37
  • 38. Наследование в JS К тому же, в большинстве случаев внутренняя логика встроенных типов реализованы на C++ из соображений производительности. 38
  • 39. Наследование в JS Решение: отделить создание объекта (allocation) от его инициализации (initialization). Функция-конструктор инициализирует созданный объект, а вот само создание спрятано за другой функцией. 39
  • 40. Наследование в JS Функция-аллокатор прячется за специальным символом @@create ("эт-эт-криэйт", ага). // именно так, без кавычек // возвращает инстанцию объекта // для передачи в инициализирующий конструктор Function[@@create]() @@create – не единственный специальный символ, есть ещё несколько полезных штук. http://people.mozilla.org/~jorendorff/es6-draft.html#sec-ecmascript-language-types-symbol-type 40
  • 41. Наследование в JS new ChildClass() теперь эквивалентен вот такой конструкции: ChildClass.call( typeof ChildClass[@@create] != 'undefined' ? ChildClass[@@create]() : // Это некоторое упрощение ;) ObjectCreate(ChildClass.prototype) ); http://people.mozilla.org/~jorendorff/es6-draft.html#sec-construct-argumentslist 41
  • 42. Наследование в JS Обещают поддержку наследования от: – стандартных типов Array, Date, RegExp; – TypedArray; – новых ES6-типов Set, WeakSet, Map, WeakMap; – и даже HTMLElement! 42
  • 43. Наследование в JS Вот так: function ChildClass () { Array.call(this); } ChildClass[@@create] = Array[@@create]; ChildClass.prototype = new Array(); 43
  • 47. Обещают весной (год не уточняют) (но хотя бы при нашей жизни)
  • 48. Сергей Константинов Руководитель группы разработки API Карт W3C TAG Member twirl@yandex-team.ru Спасибо!