On Wed, Dec 5, 2012 at 11:39 PM, Kevin Newman <capta...@unfocus.com> wrote:

> Object.create has other useful features too (that can't be polyfilled
> unfortunately) - it has a way to set properties enumerable, configurable,
> and writable and to define getters and setters. Having a mode to output to
> that might be pretty spiffy.


Yes, I'd even say that to simulate ActionScript semantics properly, we
absolutely need Object.create() and/or Object.defineProperty().
For example, in AS3, class members are not enumerable, but only expando
properties are!
Another example: by re-assigning the constructor property, the class
simulation code above changes the usually non-enumerable "constructor" to
be enumerable. So if you do a for... in loop over a class instance (in
contrast to an Object), even if the class only defines public fields,
"constructor" appears as an additional (unexpected!) key. This cannot
easily be fixed by leaving out the "constructor" re-assignment: while this
works for the first inheritance level, it starts failing with the second (I
could explain that in detail upon request). Concluding, in ECMAScript 4,
there is no solution for class simulation that does not "leak through" to
pure JavaScript clients. To make ActionScript code behave the same, we
would have to generate additional code for each and every for... in loop.

I don't know what you think about IE8 compatibility, but considering that
Flex is used for rather complex, rich UIs, not for simple web pages, we
should think about the option of dropping IE8 support. Google did that for
their rich web applications a while ago. It would allow to build an
ECMAScript 6 runtime that would be very small and still offer a much
closer, more efficient approximation of the original ActionScript 3
semantics.
But maybe this is another thread...

Reply via email to