How to tell function and generator function apart?

Dean Landolt dean at deanlandolt.com
Tue Mar 3 20:54:18 UTC 2015


One use case is for coroutine runners which accept either generators or
generator functions:

https://github.com/deanlandolt/copromise/blob/master/copromise.js#L34-L36

Is there a better way to accomplish this?


On Tue, Mar 3, 2015 at 12:12 PM, Erik Arvidsson <erik.arvidsson at gmail.com>
wrote:

> Why do you want to do this?
>
> It is an antipattern that we have covered before.
>
> On Tue, Mar 3, 2015 at 5:41 PM Guilherme Souza <19gui94 at gmail.com> wrote:
>
>> Hi all,
>>
>> I was wondering how one could check if a given function is a generator
>> function, is a cross-realm way:
>>
>> ```
>> let f = function(){}
>> let g = function*(){}
>>
>> typeof f === typeof g // 'function'
>>
>> f instanceof Function // true, but only in the same Realm
>> g instanceof Function // true, but again only in the same Realm
>>
>> let GeneratorFunction = Object.getPrototypeOf(function*(){}).constructor
>> f instanceof GeneratorFunction // false
>> g instanceof GeneratorFunction // true, but only in the same Realm
>>
>> // This works, but relies on Function.prototype being a function itself.
>> typeof Object.getPrototypeOf(f) // 'function'
>> typeof Object.getPrototypeOf(g) // 'object'
>> ```
>>
>> So what is the recommended way to do this type of check?
>> Would something like `Array.isArray` for generator functions be helpful?
>>
>> Regards,
>> Gui
>>
>>
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150303/d028f189/attachment.html>


More information about the es-discuss mailing list