It's the object literal syntax for a setter, implemented in all major
browsers outside of IE and in Rhino, and being standardized in ES3.1.
Perhaps this would be more familiar:
p={id:1};
p.__defineSetter__("a",function(value){console.log(this.id)});
Kris

On Oct 8, 1:19 pm, "Peter Michaux" <[EMAIL PROTECTED]> wrote:
> On Wed, Oct 8, 2008 at 12:15 PM, Kris Zyp <[EMAIL PROTECTED]> wrote:
> > Peter,
> > I believe the primary purpose for this design is to preserve the
> > correct |this| for setters. For example:
> > p = {set a(value){ console.log(this.id) }, id: 1};
>
> What is the above syntax with "set"? Is that a JavaScript-specific or
> a Rhino-specific extension to the language?
>
> Thanks,
> Peter
>
> > P = function(){};
> > P.prototype = p;
> > o = new P;
> > o.id = 2;
> > o.a = 3;
> > This should log the value 2 (not 1), and so basically the start
> > parameter is passed around with the put calls as
> > ScriptableObject.getProperty(obj,name) traverses the prototype chain
> > so if and when a setter is hit it can be called with the correct |
> > this|.
> > Kris
>
> > On Oct 8, 10:26 am, "Peter Michaux" <[EMAIL PROTECTED]> wrote:
> >> The documentation for Scriptable "put"
>
> >>http://www.mozilla.org/rhino/apidocs/org/mozilla/javascript/Scriptabl...)
>
> >> describes the second parameter "start"
>
> >> > Note that if a property a is defined in the prototype p
> >> > of an object o, then evaluating o.a = 23 will cause set
>
> >> What does "set" mean specifically? I don't think "set" is referring to
> >> some ECMA property that are usually in double brackets.
>
> >> > to be called on the prototype p with o as the start
> >> > parameter. To preserve JavaScript semantics, it is the
> >> > Scriptable object's responsibility to modify o.
>
> >> "the Scriptable object" refers to "o" or "p"? They could both be
> >> ScriptableObject instances, yes?
>
> >> I don't understand what the above is trying to say. To me, evaluating
> >> "o.a = 23" should set a value on "o" itself and not on o's prototype.
> >> If objects "n" and "o" both share the same prototype "p", then
> >> evaluating "o.a = 23" should not set the value "a" on prototype "p" as
> >> that would affect "n". I imagine that Rhino is doing the right thing
> >> but the above documentation seems misleading/confusing to me.
>
> >> > This design allows properties to be defined in prototypes
> >> > and implemented in terms of getters and setters of Java
> >> > values without consuming slots in each instance.
>
> >> Equally confused by this second paragraph.
>
> >> If someone explains what the documentation is trying to explain, I'll
> >> submit a documentation patch.
>
> >> Thanks,
> >> Peter
>
> > _______________________________________________
> > dev-tech-js-engine-rhino mailing list
> > [EMAIL PROTECTED]
> >https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to