471,092 Members | 1,784 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,092 software developers and data experts.

Object.prototype, getters and setters

Greetings,

I find the JavaScript's Object.prototype and getter/setter mechanism
very nice. However, I need some help with extending an object with
getters/setters in the derived class. For example:

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.

Thanks for your help.

Regards,
--
Wei
Jul 23 '05 #1
2 3823


Wei Wang wrote:

I find the JavaScript's Object.prototype and getter/setter mechanism
very nice. However, I need some help with extending an object with
getters/setters in the derived class. For example:

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, here is how it works
in pratice:

function A () {
this._a = 0;
}
A.prototype.__defineGetter__('a',
function () {
return this._a++;
}
);
function B () {
A.apply(this);
this._b = 0;
}
B.prototype = new A();
B.prototype.__defineGetter__('b',
function () {
return this._b--;
}
);

var b = new B();
alert(b.a);
alert(b.a);
alert(b.b);
alert(b.b);

And note that getters/setters are an extension to the ECMAScript edition
3 standard that is only implemented in the Mozilla JavaScript engine.
--

Martin Honnen
http://JavaScript.FAQTs.com/
Jul 23 '05 #2
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
Jul 23 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

32 posts views Thread by kelvSYC | last post: by
13 posts views Thread by Nathan White | last post: by
112 posts views Thread by mystilleef | last post: by
33 posts views Thread by christophertidy | last post: by
3 posts views Thread by =?ISO-8859-15?Q?Arne_Vajh=F8j?= | last post: by
8 posts views Thread by Hussein B | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.