On Aug 29, 2014, at 3:09 AM, Andrea Giammarchi wrote:

> Wouldn't that be inconsistent with `{}.toString.call(String.prototype)` and 
> all others ?
> 
> I'd personally expect `{}.toString.call(new Float32Array([1,2,3]))` to 
> produce same result of `{}.toString.call(Float32Array.prototype)`, seems like 
> the "least surprise"

Why one is a TypedArray instance and the other is an ordinary object.

BTW,
another way to approach this issue would be to include the equivalent of:
```js
   if (this.constructor.prototype === this) return "Object"
```
in the @@toStringTag getter for such classes.

Allen

> 
> Regards
> 
> 
> On Fri, Aug 29, 2014 at 1:44 AM, Allen Wirfs-Brock <al...@wirfs-brock.com> 
> wrote:
> 
> On Aug 28, 2014, at 2:56 PM, Jeff Walden wrote:
> 
> > Per latest draft, %TypedArray%.prototype[@@toStringTag] is a getter that 
> > throws a TypeError if |this| doesn't have the internal slots of a typed 
> > array.  Neither %TypedArray%.prototype nor 
> > {{Ui,I}nt{8,16,32},Float{32,64}}.prototype have these internal slots.  So 
> > the builtin Object toString method, called on any of these objects, will 
> > throw a TypeError.  Is this wise?  I suspect there's debugging code out 
> > there that expects that toString doesn't throw on at least the typed array 
> > prototypes (seeing as it doesn't throw in any engine I'm aware of right 
> > now, tho the returned string is inconsistent).
> 
> This seems like a special case of the general problem that methods, defined 
> on prototype objects, that have dependencies upon instance state such as 
> internal slots or exotic internal methods won't work if applied to their 
> containing prototypes when those prototypes do not provide the expected 
> instance state or behavior.
> 
> I don't think there is a general solution to this problem.  It's a place 
> where the ESs "class model" is a leaky abstraction.
> 
> As a special case solution (in support of universal toString support) we 
> could make all such @@toStringTag getters all back to returning "Object" if 
> the instance requirements they check for are not met.
> 
> I'd happily accept a bug on that.
> 
> In an earlier iteration of O.p.toString I was eating exceptions thrown when 
> getting the @@toStringTag value. But that sort of exception suppression 
> wasn't very well received.
> 
> Allen
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
> 

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to