What is `this` inside a new-invoked generator?

Axel Rauschmayer axel at rauschma.de
Mon Mar 23 20:54:26 UTC 2015

Question: what does the following code snippet log in the last line?

function* gen() {
    yield this;
let genObj = new gen();
let [_this] = genObj;
console.log(_this === genObj); // ???

I’m finding three answers:

1. The spec says [1] that any reference to `this` in a generator invoked via `new` causes a `ReferenceError`.

2. Firefox logs `false` for the code snippet.

3. A year ago, Allen stated [2] that if you invoke a generator function via `new`, `this` points to the generator object. On other words, the code snippet would log `true`.

[1] https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generator-function-definitions-runtime-semantics-evaluatebody
[2] https://esdiscuss.org/topic/reason-why-generators-do-not-have-references-to-themselves#content-8

Dr. Axel Rauschmayer
axel at rauschma.de

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20150323/22778f73/attachment.html>

More information about the es-discuss mailing list