Martin Honnen wrote:
Wei Wang wrote: [...]
A : function () {}
A.prototype =
{
a : null,
get a : function () { return a++; }
};
B : function () {}
B.prototype = new A;
Now, I would like to define a getter/setter in B. How do I do that?
There is no way to use the same syntax as in "A.prototype = ..." above.
What you have looks like some pseudo syntax to me,
But it is not entirely. Prototypes of objects inheriting directly
from Object can be defined using an Object literal and getters may
be defined with the `get' keyword before the property identifier:
<http://developer-test.mozilla.org/docs/Core_JavaScript_1.5_Guide:Creating_New_Objects:Def ining_Getters_and_Setters>
Whether the latter really *works* in an implementation is another issue.
It does work in JavaScript 1.5 as implemented in Mozilla/5.0 (tested
successfully with `Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.8)
Gecko/20050513 Firefox/1.0.4 (Debian package 1.0.4-1) Mnenhy/0.7.2.0'):
var A = function () {}; // although I'd prefer: function A() {}
A.prototype = {
a: null,
get b() { return this.a++; }
};
var x = new A;
alert(x.b); // 0
alert(x.b); // 1
here is how it works in pratice: [...]
Since the above works in practice as well, I don't see a need to call
the __defineGetter__() method explicitely. Since method calls are
less efficient than variable instantiation, one could probably increase
efficiency with my approach.
What of course does not work is having `a' as identifier for both the
non-function property and the getter; identifiers have to be unique
within a scope.
PointedEars