On Mar 12, 2009, at 7:13 PM, Brendan Eich wrote:
On Mar 12, 2009, at 6:45 PM, Tobie Langel wrote:
A very naïve specification would boil down to modifying step 2 and
inserting a step 3 inside of 13.2.2 of the 23feb09 draft:
13.2.2 [[Construct]]
When the [[Construct]] property for a Function object F is called
with a possibly empty list of
arguments, the following steps are taken:
1. Let obj be a newly created native ECMAScript object.
2. if the name property of F is a string value set the [[Class]]
internal property of obj to the name property of F.
3. if the name property of F is not a string value set the
[[Class]] internal property of obj to "Object".
From the point of view of implementors, setting the "vtable" for an
instance is not going to be done based on a string value in a
property of F. In either case (step 2 or 3) the same implementation
code for generic Object behavior, appropriate to [[Class]] "Object"
in ES1-3, will be chosen. The only difference that matters (correct
me if I'm wrong) is the output of Object.prototype.toString.call(obj).
One more point representing implementors everywhere ;-).
The steps in 13.2.2 do not require storing a link to the constructor
function directly in the new instance. This is the point I mentioned
going over in 1997 during ES1 standardization. Generally while objects
have a fixed number of fields to set on creation, including
[[Prototype]] and [[Class]], they do not have [[Constructor]] or
[[ClassName]]. We don't want to add to the mandatory short-list (which
is [[Prototype]] and [[Class]], [[Scope]] too for function and certain
DOM objects).
What you want is for Object.prototype.toString.call(obj) to return
F.name. That could be specified by changing Object.prototype.toString,
instead of 13.2.2. I don't have time to try it out and see how it
works, but I thought I'd suggest it. The constructor property is
writable and deletable, which indeed creates a hazard. But it may be
tolerable.
/be
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss