Le 30/10/2011 01:34, Axel Rauschmayer a écrit :
> http://wiki.ecmascript.org/doku.php?id=harmony:object_extension_literal_class_pattern
>
> const className = superClass <| function(/*constructor parameters */) {
> //constructor body
> super.constructor(/*arguments to super constructor */);
> this.{
> //per instance property definitions
> };
> }.prototype.{
> //instance properties defined on prototype
> }.constructor.{
> //class (ie, constructor) properties
> };
>
> The main problem is that obj.prototype.{...} does not evaluate to obj
I wonder if the "only one semicolon" obsession is really worth it. Consider:
-----
const className = superClass <| function(/*constructor parameters */) {
//constructor body
super.constructor(/*arguments to super constructor */);
this.{
//per instance property definitions
};
};
className.prototype.{
// prototype properties
};
// and if really necessary:
/*className.{
// "constructor properties"
};*/
-----
As far as I'm concern, this is declarative enough:
1) <| provides the proper "super" (why the ".constructor"?) within the
constructor body
2) <| also sets className.prototype.[[Prototype]] to superClass.prototype
3) this.{} to initialize instance properties
4) className.prototype.{} to set prototype properties
Because I write this in 2 instructions (i don't count constructor
properties as I don't see why they're needed), I need to repeat
"className". A dedicated class syntax would avoid this, I admit.
On a side note. <| also sets className.[[Prototype]] to superClass (5).
I still think this is a mistake and that two different operators should
be defined. One operator for 1)+2) and the other for 5).
1)+2) is about constructing the proper object when a function is used as
a constructor
5) is about setting a custom [[Prototype]] to an object (aka
"subclassing"). And as it turns out, functions are objects in
JavaScript, hence the ambiguity of the operator.
The way I see it, the operator for 1) and 2) would throw if the RHS is
not a function expression.
Thoughts on this last point?
David
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss