On Nov 14, 2011, at 2:01 PM, Brendan Eich wrote:

> On Nov 14, 2011, at 12:16 PM, Allen Wirfs-Brock wrote:
> 
>> let Point = {
>>      x:0,
>>      y,0,
>>      constructor(x,y} {
>>          this.x=x;
>>          this.y=y;
>>      }
>> }.constructor;   //<----------- note added property reference
>> 
>> let p = new Point(1,2);  //new operator applied to a constructible function 
> 
> So can you spec operator new a bit? It tries [[Construct]] and if missing, 
> tries for a .constructor property that it calls on a fresh instance of Object 
> whose [[Prototype]] is the exemplar?

Yup, that's essentially the semantics. I'm going to write up the object 
exemplar strawman which will cover this (and also instanceof). 

> 
> Dave's work on 
> http://wiki.ecmascript.org/doku.php?id=strawman:minimal_classes brought to 
> light some added wiring that comes for free in the prototypal pattern when 
> you write a constructor function as a function declaration: the intrinsic 
> name of the constructor function is the class name.
> 
> For exemplars, if constructor is defined using method definition shorthand,
> 
> http://wiki.ecmascript.org/doku.php?id=harmony:object_literals#object_literal_property_shorthands
> 
> says the intrinsic name will be 'constructor'. This will be a drag in 
> debugging scenarios. You'll want to see Point, Square, Circle, Ellipse, 
> Rectangle, etc. but all you'll get is 'constructor' every time.

This is an interesting point that arises for any non-binding declaration form.  
Function expression really are a similar situation where the only (semantic) 
reason for having a name is so it can be intrinsically referenced. In theory, 
some sort of internal naming syntax could be adopted for this case.  However, I 
worry that that part leads to more and more embellishment that try to address 
different minor use cases and usability issues.  We eventually get back to 
Cordova proposals that we can't get consensus on.  I tend to  think of JS as 
being more of a non-builtout OEM VW bus rather than a 70's Detroit luxury car.  
 

Another approach to the debugging problem is the one put forward in the 
Mirghasem, et al SPLASH/Wavefront paper 
(http://dl.acm.org/citation.cfm?id=2048222&preflayout=tabs preprint: 
http://blog.getfirebug.com/2011/04/28/naming-anonymous-javascript-functions/ ) 
Such constructors would simply be recognized as yet another variation of 
implicit function naming that debuggers should be able to recognize (perhaps 
with some front-end help) and assign a meaningful name to.  It's probably a win 
if tools can deal with it out having to add to the language.

> 
> The attributes in the 
> http://wiki.ecmascript.org/doku.php?id=harmony:object_literals#object_literal_property_shorthands
>  section are frosty. Is that the right default for methods? Is it the right 
> one for constructor in particular? I'm just asking, this is a separate issue 
> but I spotted it and wanted to get it out before forgetting.

We've thrashed around about attributes for concise methods with the latest 
decision happening at the Sept. TC39 meeting.  I don't know if those decisions 
are still  holding.  Regardless, I think "constructor" should be considered 
special and hence potentially could have other attribute defaults.  Another 
special need of constructor method (in an object literal) is that it needs to 
have its prototype property automatically set to the object that contains it.  
(another detail for the object exemplar strawman).

Allen

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to