kobezzza,
Цитата:
|
Цитата:
|
kobezzza,
Цитата:
Цитата:
Цитата:
|
Цитата:
|
kobezzza,
помню, ещё с es6transpliter'ом мучился, когда пытался карты кода использовать. Поначалу думал, что совсем туплю, а потом случайно заглянул в раздел "проблемы"(issues), а там ;( |
Цитата:
|
А вот и черновик спеки http://wiki.ecmascript.org/doku.php?...4_draft_rev_29
|
Цитата:
у меня от открытия такого файла в несколько десятков тысяч строк консоль взрывается |
Цитата:
|
|
Поигрался с Символами из ES7, офигенная тема, теперь мы можем срать в Object.prototype и не боятся наступить на мину :)
Object.prototype[Symbol.referenceLength] = function () {
return Object.keys(this).length;
};
var foo = {a: 1, b: 2};
foo::length() // 2
Вообще ES7 делает качественный скачок в развитии языка, что не может не радовать. |
Цитата:
Цитата:
|
Копался на wiki GCC и обнаружил 2 вещи:
1) Теперь GCC частично понимает ES6 и даже умеет работать как транслятор: https://github.com/google/closure-co...ki/ECMAScript6 2) Аннотацию @expose решили выпилить (из доки её уже потёрли) и заменить на @exports: https://github.com/google/closure-compiler/issues/636. Беда в том, что @exports сейчас адово глючит и последняя стабильная сборка не поддерживает часть новых опций этой аннотации, т.е. они поспешили удалить @expose, но не доделали @exports, печалька. |
https://github.com/6to5/6to5/pull/29...mment-66951875
Скорость автора всех шокирует :D |
Наш немецкий коллега снова радует наиподробнейшими статьями http://www.2ality.com/2014/12/es6-symbols.html
|
И ещё одна годнота http://www.2ality.com/2015/01/es6-maps-sets.html
На этот раз про Maps и Sets. |
Тут такое дело.. короче, я не осилил модули с использованием 6to5.
Как быть? Тестирую на клиенте вот это: index.js import aaa from 'c_module'; aaa(); c_module.js
function aaa() {
console.log('text');
}
exports default aaa;
Компилируется без ошибок, но в браузере выдаёт это: Цитата:
Будьте добры, подскажите кто пользуется. |
Цитата:
Но лично я компилирую в AMD с использованием RequireJS - это асинхронная загрузка, что плюс к скорости. Выглядит так:
//gulptask.js
gulp.task("build", function() {
gulp.src(`./src/${page}/*.js`)
.pipe(sourcemaps.init())
.pipe(es6to5({
modules: "amd",
moduleIds: true
}))
.pipe(concat("index.js"))
.pipe(gulpif(production, uglify()))
.pipe(sourcemaps.wirte("./"))
.pipe(gulp.dest(`./build/${page}`));
})
<!-- index.html -->
<script data-main="./build/index/index" src="./lib/require.js"></script>
<script>
requirejs.config({
enforceDefine: true,
paths: {
//Пути к сторонним библиотекам
jquery: [
"https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min", //CDN
"./lib/jquery.js" //Фоллбек
]
}
})
</script>
|
Erolast,
спасибо, сегодня как-нибудь попробую. |
Я-то надеялся что оно само всё за меня подключит
![]() |
Столкнулся с проблемой, что в Chrome в strictMode метод next у объекта генератора помечен как readOnly, но с другой стороны через defineProperty его можно поменять.
В ФФ всё ок. Копался в спеке, но ничего не нашёл по этому поводу (может конечно проглядел), может кто в курсе или может дать ссылку на ответ? Хочется понять: это баг хрома или действительно по стандарту next readOnly (хотя это очень странно), но тогда почему через defineProperty свойство можно установить. |
Перевёл Collection на 6to5, почти не было проблем. Snakeskin не поддаётся, но баг какой то суко хитрый, пока сдался.
*** ФФ полностью воспроизводит Collection и Snakeskin без трансляции! Однако транслированный вариант пока работает быстрее. |
Ура! Я смог перевести SS на 6to5! Приятный профит: скорость транслятора увеличилась на ~10%.
|
kobezzza, как с багом разобрался ?
|
kobezzza,
Цитата:
kobezzza, Цитата:
|
Цитата:
Цитата:
Цитата:
Вообще в целом SS работает оч шустро, но есть узкие места. Идеи по оптимизации есть, но пока лень имплементить их, уж больно муторно. *** В целом 6to5 уже production ready транслятор, юзать можно смело. Баги встречаются, но автор просто с адовой скоростью их фиксит :) |
Цитата:
function Constructor() {}
Object.defineProperty(Constructor.prototype, 'test', {
value: 1,
configurable: false,
writable: false
});
var obj = new Constructor;
obj.test = 2;
alert(obj.test);
|
Octane, интересно, что
function Constructor() {}
Object.defineProperty(Constructor.prototype, 'test', {
value: 1,
configurable: false,
writable: false
});
var obj = new Constructor;
Object.defineProperty(obj, 'test', {
value: 2
});
alert(obj.test);
Но вообще мой вопрос в другом: правильно ли, что next у объекта генератора read-only, т.к. в ФФ поведение другое и в стандарте ничего про это я не нашёл, ну и плюс это странно, т.к. в JS любой базовый метод можно переопределить или доопределить, например,
Array.prototype.forEach = function () {
...
};
И что принципиально другое в
function *foo() {
}
var bar = foo();
bar.next = function () {
...
};
Собственно, вот https://github.com/kobezzza/Collecti...orEach.js#L796 |
Цитата:
Если ты запустишь мой пример в strict режиме в любом браузере, то получишь exception Все дело только в том, что разработчики хрома зачем-то добавили атрибуты configurable=false и writable=false для next |
Цитата:
И ещё: Object.defineProperty позволяет обойти это поведения, я не знал про это и как я понимаю, что это так и должно быть? |
Да, так работает во всех браузерах. Хз где про это прочитать, у Сошникова вроде нету.
Вообще с defineProperty много проблем, даже не в strict он может на некоторых Android 4 девайсах выкинуть can't redefine property для DOM элементов или свалиться на добавлении свойства функции. |
Immediately-invoked function expression (IIFE)
Разбирался как должны себя вести функции в ES6 в следующих случаях:
function f(x = g()) {…}
function f(x = function () {…}()) {…}
не нашел вменяемой информации, но вроде как этот блок с аргументами должен выполняться вместе с function body, но что интересно, наткнулся на название повсеместно применяемого приема:
(function () {
…
}());
(function () {
…
})();
!function () {
…
}();
new function () {
…
};
Immediately-invoked function expression (IIFE)раньше только self-executing anonymous function встречал ------------------------------------------------ как-то я пропустил эту тему Self-invoking функции :( |
Octane,
Цитата:
|
Цитата:
|
Я читал эту статью, но там ни слова про IIFE в дефолтных значениях, можно только догадываться что такая функция будет исполнена перед function body, так как значения вычисляются при каждом вызове функции, а не при декларации.
|
kobezzza,
да, интересно придумали. Только вот теперь иногда придётся учитывать ещё одну область видимости) |
Цитата:
- template foo(a = function () {}) // Ошибка
|
new function (x = () => this) {
console.log(x() === this) // true
}
|
|
Цитата:
|
| Часовой пояс GMT +3, время: 09:58. |