W3C home > Mailing lists > Public > public-script-coord@w3.org > October to December 2011

Re: What type should .findAll return

From: Brendan Eich <brendan@mozilla.org>
Date: Mon, 14 Nov 2011 15:23:11 -0800
Cc: Rick Waldron <waldron.rick@gmail.com>, Jonas Sicking <jonas@sicking.cc>, Allen Wirfs-Brock <allen@wirfs-brock.com>, Boris Zbarsky <bzbarsky@mit.edu>, "public-script-coord@w3.org" <public-script-coord@w3.org>, public-webapps <public-webapps@w3.org>
Message-Id: <37A1721F-BFF2-4786-861B-D0AA8F336EAE@mozilla.org>
To: Yehuda Katz <wycats@gmail.com>
On Nov 14, 2011, at 3:13 PM, Yehuda Katz wrote:

> It seems as though the spec intends to disallow host objects (i.e. DOM) from fully acting like an Array, which is clearly the intent here. Perhaps this is a time for "willful disobedience" and a correction in ES6?

Calm down -- this confrontational style is unjustified.

The spec cannot deal in non-observables. DOM host objects in most implementations are full of methods, which really are native function objects. But it's always possible to implement a work-alike. So long as a host array follows the contract in every observable way, no problem.

What's at issue is the abuse of internal methods defined only for spec-internal purposes as arbitrary "plugin APIs" by other specs. That's where negotiation and future-proofing are needed.

/be

> 
> Yehuda Katz
> (ph) 718.877.1325
> 
> 
> On Mon, Nov 14, 2011 at 10:46 AM, Rick Waldron <waldron.rick@gmail.com> wrote:
> [snip]
>  
> ES5.1 clause 8.6.2 says: 
> >           "The value of the [[Class]] internal property of a host object may be any String value except one of "Arguments", "Array",..."
> > In other words, host object provides (such as a DOM implementation) are not allowed to define new kinds of objects whose [[Class]] is Array.
> > It's fine to want to define a new kind of host object that is behaviorally very similar (but slight different) from instances of the built-in Array constructor.  But characterizing such objects by saying they have [[Class]]=="Array"
> >  is a not meaningful from a ES5.1 specification perspective.
> 
> I'm fine with any formulation, as long as it gives the correct behaviour in cases like Array.prototype.concat and Array.isArray.
> 
> ES 5.1 15.4.3.2 Array.isArray()  
> ...
> 2. If the value of the [[Class]] internal property of arg is "Array", then return true.
> ...
> 
> Considering Allen's previous comment, this is not going to be allowed.
> 
> Rick
>  
> 
> Do you have suggestions for what to write?
> 
> / Jonas
> 
> 
Received on Monday, 14 November 2011 23:23:48 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 8 May 2013 19:30:04 UTC