How does super lookups and calls work for getters and setters in ES3.1
and ES4? It seems like the following scheme should work.
Given the following code in ES4:
class A {
function get x() {
...
}
function set x(value) {
...
}
}
class B extends A {
private let _x = 0;
function get x() {
return super.x;
}
function set x(value) {
_x = value;
super.x = value;
}
}
In JS1.7 I think the following works
function A() {
...
}
A.prototype.__defineGetter__('x', ...);
A.prototype.__defineSetter__('x', ...);
function B() {
A.call(this);
}
B.prototype = new A; // Or use helper to prevent calling A's
constructor while setting up the prototype object
B.prototype._x = 0;
B.prototype.__defineGetter__('x', function() {
var aGetter = A.prototype.__lookupGetter__('x);
return aGetter.call(this);
};
B.prototype.__defineSetter__('x', function(value) {
this.x_ = value;
var aSetter = A.prototype.__lookupSetter__('x);
aSetter.call(this, value);
};
Would ES3.1 work by simply replacing __lookup(G|S)etter__ by Object.getProperty?
--
erik
On Mon, May 12, 2008 at 08:52, Lars Hansen <[EMAIL PROTECTED]> wrote:
> The generated getter and setter ought to have roughly the same
> behavior as the getting and setting behavior for a property on
> the class.
>
> The behavior for reading and writing properties is this, IIRC:
>
> If the class is compiled in standard mode, then reads from nonexistent
> properties return undefined. Writes to nonexistent properties
> on non-dynamic classes fail silently, whereas writes to nonexistent
> properties on dynamic classes create those properties.
>
> If the class is compiled in strict mode, then reads from nonexistent
> properties on non-dynamic classes throw an exception (no such property);
> reads from nonexistent properties on dynamic classes return undefined.
> Writes to nonexistent properties on non-dynamic classes throw an
> exception (no such property), whereas writes to nonexistent properties
> on dynamic classes create those properties.
>
> For generated getters and setters (in classes at least), it seems
> that matching that behavior, except for property creation, is
> roughly right. I'd say that the write ought to be silently ignored
> on non-strict classes and that an error should be thrown on strict
> classes.
>
> And yes, it ought to be possible to invoke the superclass getter,
> the syntax is as for accessing a property on a superclass,
> "super.p" for the immediate base class or "super(C).p" for classes
> higher up the inheritance chain.
>
> --lars
>
>
> > -----Original Message-----
> > From: P T Withington [mailto:[EMAIL PROTECTED] On Behalf Of
> > P T Withington
> > Sent: 12. mai 2008 07:59
> > To: Lars Hansen
> > Cc: Kris Zyp; [EMAIL PROTECTED]; es4-discuss Discuss
> > Subject: Re: getter and setter inheritance
> >
>
>
> > On 2008-05-09, at 12:46 EDT, Lars Hansen wrote:
> >
> > > (One bike ride and one cup of coffee later.)
> > >
> > > Clearly there is a difference between class/interface
> > inheritance on
> > > the one hand and prototype inheritance on the other.
> > >
> > > In either case I think the introduction of a setter and/or
> > a getter in
> > > a context introduces definitions for both in that context,
> > essentially
> > > a special property that holds a getter/setter pair. A missing
> > > getter/setter is generated (that's what ES4 specifies now.) That
> > > means that in prototype contexts, if an object has a getter or a
> > > setter for a
> > > field, the prototype will never be searched for the missing half.
> > > In a
> > > class context, getters and setters can be overridden
> > because the class
> > > instance only has the one special property with the getter/setter
> > > pair, and the values in that property depend on the class that the
> > > instance is an instance of. So different classes have different
> > > pairs.
> >
> > (I've only been to spin class, but I've had 1 coffee and 2 teas.)
> >
> > When "A missing getter/setter is generated", what is its
> > functionality? Does it just error?
> >
> > Can I call a super getter/setter method (I hope)? What is
> > the syntax for that?
> >
> >
> _______________________________________________
> Es3.x-discuss mailing list
> [EMAIL PROTECTED]
> https://mail.mozilla.org/listinfo/es3.x-discuss
_______________________________________________
Es4-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es4-discuss