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
> 
> a...@rauschma.de
> twitter.com/rauschma
> 
> home: rauschma.de
> blog: 2ality.com
> 
> 
> 

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to