I suspect it's not nearly so rare as you think. For example, it just showed up 
in Tom and Mark's new proxy proposal:

> The protect trap is called on Object.{freeze,seal,preventExtensions}(aProxy). 
> The operation argument is a string identifying the corresponding operation 
> (“freeze”, “seal”, “preventExtensions”). This makes it easy for a handler to 
> forward this operation, by e.g. performing Object[operation](obj).


A simple way to abstract out "do this concrete operation" to "do one of the 
following set of possible concrete operations" is to pass the name as a string. 
Yes, there's a certain aesthetic that says that's icky, but JS makes it so 
convenient that it's the obvious thing to do.

Dave

On Oct 17, 2011, at 4:15 PM, Allen Wirfs-Brock wrote:

> 
> On Oct 17, 2011, at 3:34 PM, David Herman wrote:
>> 
>> 
>>> IMHO the single "property name space" of es-current is a feature, not a bug.
>> 
>> I tend to agree. There are expressibility problems, too. For example, if you 
>> have an object that uses . for its API and [] for some other data, then what 
>> do you do when you want to dynamically compute an API name?
> 
> In most languages, this would fall into the realm of the reflection API.
> 
> What is the actual frequency of such driven API member selection.  If it is 
> high (particularly, high than the utility of good collections) that we may be 
> exposing other problems we need to look at more closely.
> 
> 
>> I would hope not
>> 
>>     eval("obj." + computeName())
>> 
>> But I don't see any obvious ways out of this that aren't pretty convoluted.
>> 
> 
> I'll give you four:
> 
> 1) Object.getOwnPropertyDescriptor(obj,name).value
> etc.
> 
> 2) two new reflection functions:
>      Object.getProperty(obj,name)
>      Object.setProperty(obj,name,value)
> 
> 3) build upon the possible alternative private name property syntax
>      let foo='foo';
>      obj@foo
> or perhaps
>      obj@('foo')
> 
> 4)  a switch statement:
>    switch (computedAPIName) {
>       case 'property1':
>          obj.property1(/*args */);
>          break;
>       case 'property2':
>          obj.property2(/*args */);
>          break;
>       case 'property3':
>          // etc.
> }
> 
> All of these start from the perspective that this sort of reflective API 
> access should be quite rare.  
> 
> Allen
> 
> 
> 
> 
> 

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

Reply via email to