Re: Array-with-item in WebIDL

On Tue, Jun 9, 2015 at 9:45 PM, Jonas Sicking <jonas@sicking.cc> wrote:
> As you may know, we have a number of types, at least DOMStringList,
> FileList and DOMRectList which are essentially JS Array objects.
> Except that they now are DOM objects and so lack a bunch of the useful
> functions on the Array prototype. This often cause developers to do
> ugly hacks like
>
> var realArray = Array.prototype.slice.call(domObject, 0);
>
> Generally speaking, this is fixable by changing DOMStringList into
> sequence<DOMString> in the webidl. This would cause these functions to
> return real JS Arrays instead.
>
> The only thing preventing us from doing this is that the DOM classes
> for historical reasons have a .item() function on them. This .item()
> function is redundant and most developers simply use domObject[n]
> rather than domObject.item(n). Sadly the .item() functions seem used
> enough that switching to Arrays isn't web compatible.
>
> I was thinking we could introduce a sequence_with_item<...> type in
> WebIDL. This would simply map to a real Array object, but one which
> has a .item function added to it. Either by adding a .item function on
> the returned object itself, or by making the return object have a
> different prototype, but otherwise be a normal Array.
>
> Obviously an alternative is to just leave things as status-quo.

I would prefer we not status-quo on this.  As an author, the constant
need to wrap return values in [].slice.call() is frustrating and
tiring.  Array subclass seems like the way to go.

(Also I want to find these people that are using .item() and shake
them while shouting "WHYYYYYYY?".)

~TJ

Received on Wednesday, 10 June 2015 17:03:42 UTC