GeneratorFunctionPrototype should probably be a function

Allen Wirfs-Brock allen at
Tue Aug 13 10:44:27 PDT 2013

On Aug 13, 2013, at 9:41 AM, André Bargull wrote:

>> Hi,
>> Section of the July 15 draft says:
>>     Properties of the GeneratorFunction Prototype Object
>>     The GeneratorFunction prototype object is an ordinary object. It is
>>     not a function object and does not have a [[Code]] internal data
>>     property or any other of the internal data properties listed in
>>     Table 13. In addition to being the value of the prototype property
>>     of the %GeneratorFunction% intrinsic and is itself the %Generator%
>>     instrinsic.
>> See for
>> the gnarlies.  To be explicit, we are talking about this object:
>>   var GeneratorFunctionPrototype = function*(){}.__proto__;
>> I think this object should be a function and not a normal object.
>>   1. The spec doesn't specify any other objects for which "x instanceof
>>      Function" that aren't functions.
> Isn't that just because no other object inherits from the Function object in the specification? For example on the user level you can write `class MyFunction extends Function {}`, where `MyFunction.prototype instanceof Function` yields true, but `typeof MyFunction.prototype` is still "object". IIRC Allen even spec'ed GeneratorFunction similar to if it was written in the class syntax. 

More generally, we've previously discussed and decided to break from the ES<6 convention that built-in prototype objects act as if they were instances of their associated constructors.  That generally won't be the case for prototypes defined using a class declarations.  We even decided to relax that requirement for the existing built-in, except where it would create backwards compat issues (Function.prototype and Array.prototype appear to be situations where there are such issues.)

instanceof is essentially broken when applied to most non-built-in prototype objects because they usually just aren't defined to proper operate as instances of the associated constructor.

>>   2. Function.prototype.toString is the binding for ".toString()" on
>>      this object, but it is only applicable to function receivers.
> The same restriction also applies to Number, String, Boolean, RegExp and Date (or rather to the corresponding prototype objects). So this is not a unique behaviour w.r.t. the GeneratorFunction prototype object. 

same basic issue, many own or inherited prototype methods won't work on prototype objects.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list