Array-with-item in WebIDL

Hi All,

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.

/ Jonas

Received on Wednesday, 10 June 2015 04:46:57 UTC