W3C home > Mailing lists > Public > public-script-coord@w3.org > April to June 2015

Re: Array-with-item in WebIDL

From: Alex Russell <slightlyoff@google.com>
Date: Tue, 23 Jun 2015 14:04:56 +1000
Message-ID: <CANr5HFUh7C1rOvNarntiDZ4Z4XMHbn9HbYpdgsj3uAjp=nNKkQ@mail.gmail.com>
To: Jonas Sicking <jonas@sicking.cc>
Cc: Allen Wirfs-Brock <allen@wirfs-brock.com>, Travis Leithead <travis.leithead@microsoft.com>, Joshua Bell <jsbell@google.com>, "Tab Atkins Jr." <jackalmage@gmail.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>
On Wed, Jun 17, 2015 at 8:59 AM, Jonas Sicking <jonas@sicking.cc> wrote:

> FWIW, very few of the DOM APIs return array-like objects with a
> "contains" function. It's much more common to return an object with a
> "item" function. So if we were able to add "item" but not "contains"
> that would still enable us to switch most of the APIs in question [*]
> to use real JS Arrays.
>
> I'd also love to hear some thoughts about what we want Array.isArray()
> to return for one of these objects. And would using a subclass of
> Array accomplish that desired behavior?
>
> [*] Sadly NodeList is not one of the APIs in question since NodeList
> needs to not be mutable through any Array mutator functions, but can't
> use a frozen Array since it changes its contents. Fortunately NodeList
> is an exception here.


I don't think that's strictly true. NodeList changes *from the C++ side* are
in fact reflected to others with references today, but the reverse is not
true. Mutating an Array which represents this contents doesn't necessarialy
need to reflect back to the C++ side, and because the contents (from the
perspective of script) are updated by C++ at random points, they can be
re-set by the C++ side whenever.

NodeList can be an Array, it's just that the mutating methods need to not
propagate back.

Regards



On Tue, Jun 16, 2015 at 3:01 PM, Allen Wirfs-Brock
> <allen@wirfs-brock.com> wrote:
> >
> > On Jun 16, 2015, at 2:50 PM, Travis Leithead wrote:
> >
> > Perhaps this is heretical, but has anyone considered adding "item" and/or
> > "contains" to the native Array.prototype object in ES? If this is indeed
> the
> > web-compat blocker for dropping NodeList use in various DOM APIs, I'd
> like
> > to see if anyone could support this.
> >
> >
> > TC39 investigated adding a method named "contains" to Array.prototype be
> we
> > discovered that it cause web breakage:
> > https://github.com/tc39/Array.prototype.includes#status . Instead a
> method
> > called "includes" is on track to be added.
> >
> > "items" is a possibility, but past experience suggests that there is a
> fair
> > chance it would cause problems.
> >
> > Allen.
>
>
Received on Tuesday, 23 June 2015 04:05:53 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 23 June 2015 04:05:55 UTC