Standard builtins' prototypes and toString

C. Scott Ananian ecmascript at cscott.net
Thu Jun 12 12:14:17 PDT 2014


On Thu, Jun 12, 2014 at 3:06 PM, Till Schneidereit
<till at tillschneidereit.net> wrote:
> On Thu, Jun 12, 2014 at 8:29 PM, C. Scott Ananian <ecmascript at cscott.net>
> wrote:
>> (a) `#toString` throws TypeError when given a non-instance.  Changes
>> `Date#toString()`, no change to `Date#toString.call({})`.
>>
>> (b) `#toString` is generic; invokes `Object#toString` when given a
>> non-instance.  Changes both `Date#toString()` and
>> `Date#toString.call({})`.
>>
>> (c) `#toString` is generic; uses a "zero" value when given a
>> non-instance.  No change to `Date#toString()`; changes
>> `Date#toString.call({})`.
>>
>> (d) `#toString` returns a "zero" value when given a prototype, throws
>> TypeError otherwise. No change to `Date#toString()` or
>> `Date#toString.call({})`.
>
> There is (e) `#toString` returns "[object Object]" when invoked on the (an)
> original Date.prototype (regardless of the Realm it came from). Otherwise,
> it throws when invoked on a non-instance.
>
> This is what Allen and me proposed.

Allen said:
> Your proposed change would return ToDateString(NaN) for both cases.  So that preserves the ES5 level result when applied to Date.prototype but changes the result for any other non-Date object.
>
> With my proposed solution they would both produce  "[object Object]" for both cases. So it changes the result of both cases, relative to ES5.

...which is option (b).  (Allen, correct me if I'm reading that wrong!)
  --scott


More information about the es-discuss mailing list