On Jun 20, 2011, at 9:52 AM, Axel Rauschmayer wrote:
> Interesting insight, thanks. If defineProperties() was an instance method, we
> would have something like the following.
>
> var Multiplier = {
> multiply: function (x) {
> return x * this.FACTOR;
> }
> }.defineProperties({
> FACTOR: { value: 3, writable: false }
> });
You could always get started via
Object.defineProperty(Object.prototype, 'defineProperties', {value:
Object.defineProperties.bind(Object)});
I suppose.
> That is, you use the object literal for when the defaults are OK and
> defineProperties() for special cases, without having to type "Object" and
> without having to repeat the object you want to add properties to. But with
> things still changing, this might be a case of YAGNI (introducing easy
> extensibility where it is never needed).
The above is a mix of Object.* verbosity with object literal conciseness. Not
good to be between hell and heaven :-P.
> I keep thinking that something like Java annotations might also work here,
> especially as Python has adapted them successfully to its needs, via
> decorators:
> http://www.python.org/dev/peps/pep-0318/
>
> I would mainly use property attributes to declare a property as
> non-configurable and non-writable. That would be the analog to const for
> variables. Via decorators, one could introduce @const for this purpose.
Decorators are in some folks' sights for Harmony, but not ES.next. However,
they're still too verbose.
/be
>
> Axel
>
> On Jun 20, 2011, at 18:22 , Brendan Eich wrote:
>
>> On Jun 20, 2011, at 3:43 AM, Axel Rauschmayer wrote:
>>
>>> Would it make sense to include a shorthand for calling
>>> Object.defineProperty() to object literals?
>>>
>>> Possible benefits:
>>> - Extensible, should other property attributes come up in the future
>>> - Descriptive
>>> - Might obviate the need to have a shorthand for "enumerable" (I usually
>>> ignore it and can’t think of any use cases)
>>>
>>> === Example ===
>>>
>>> var Multiplier = {
>>> FACTOR :: { value: 3, writable: false },
>>
>> Do not use :: -- it is wanted for
>> http://wiki.ecmascript.org/doku.php?id=strawman:guards (and used previously
>> in E4X, ECMA-357).
>>
>> Allen presented new syntax roughly as verbose at the March TC39 meeting.
>> General reaction was "too verbose".
>>
>> Wherefore the #!~ prefixes idea, now in
>> http://wiki.ecmascript.org/doku.php?id=harmony:object_literals -- the syntax
>> there is definitely not final, BTW, but something like it is needed. I've
>> argued we shouldn't try to be "half-verbose", and since ES5 has the very
>> verbose functional API, object initialisers probably will go the other way.
>>
>> /be
>>
>>
>
> --
> Dr. Axel Rauschmayer
>
> [email protected]
> twitter.com/rauschma
>
> home: rauschma.de
> blog: 2ality.com
>
>
>
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss