Столкнулся с проблемой, что в 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, время: 03:59. |