- From: Cameron McCormack <cam@mcc.id.au>
- Date: Thu, 07 Jun 2012 15:38:14 +1000
- To: Boris Zbarsky <bzbarsky@MIT.EDU>
- CC: public-script-coord@w3.org
Boris Zbarsky:
> WebIDL allows passing dictionaries to methods and returning dictionaries
> from methods. Why are dictionary-typed attributes not allowed?
>
> Or put another way, why is this not OK:
>
> attribute DictType foo;
>
> while this is OK:
>
> void setFoo(DictType arg);
> DictType getFoo();
>
> ?
Because dictionaries are meant to be "pass by value" types, like
sequences. Because you would be returning a plain JS object – and a new
one each time at that – it wouldn't be suitable for use as an attribute
type. The platform object wouldn't be able to "watch" for modifications
of the JS object, if you did
myObject.foo.member = 123;
just as if you were allowed to have:
interface A {
sequence<long> xs;
};
where
a.xs[5] = 1;
would not have the effect that authors would expect. Requiring them to
be passed to and returned from operations helps convey that a copy of
the object is going to be made (or at least the effect is going to be as
if a copy is made).
Received on Thursday, 7 June 2012 05:38:51 UTC