Столкнулся с проблемой, что в 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 позволяет обойти это поведения, я не знал про это и как я понимаю, что это так и должно быть? |
| Часовой пояс GMT +3, время: 00:20. |