Re: DOM collections index out of bounds and JavaScript.

On 10/26/10, Cameron McCormack <cam@mcc.id.au> wrote:
> Anne van Kesteren:
>> Yeah, it would be nice if sequence mapped to that so that NodeList
>> could be defined as a sequence instead, same for StyleSheetList,
>> etc. And then Web IDL would take care of all the details rather than
>> each specification.
>
> I don’t know that sequence is appropriate for this.  They are meant to
> be for pass-by-value lists.
>
> Is the issue here that you can’t use a base interface because then you
> would lose some type specificity, e.g.
>
>   interface Collection {
>     attribute unsigned long length;
>     getter any item(unsigned long index);
>   }
>
> where you need to use “any” because you don’t know what the type of the
> derived interface elements will be?
>

The "object" type would be more specific but that won't cover string
values as with CSSStyleDeclaration, e.g. `elem.style.item(3)`.

A sub-interface would override that `any` with the most specific
detail as it could, like "Node" for childNodes, "HTMLImageElement" for
document.images, et al.

Though with getter or forwarded [[Get]] proxy, implementations are
inconsistent. Some implementations have forwarded [[Get]], other times
it is just an object with a `k` property for each index less than
collection.length-1, and if the object does not have a property, the
result is `undefined`, which, as Erik mentions, is inconsistent with
the way any `item` method
is specified.

Received on Tuesday, 26 October 2010 22:51:49 UTC