Методы, объявленные как методы (с использованием расширенных объектных литератур или классов ES6), не являются конструкторами/не имеют цепочку прототипов.
Но генераторы, объявленные с помощью синтаксиса метода, имеют цепочку прототипов и являются конструкторами.
Возьмем следующий пример - (требуется v8)
'use strict';
class x {
  *a() { this.b() }
  b() { print('class method'); }
}
let i = new x();
i.a.prototype.b = function() { print('generator method'); };
i.a().next();
(new i.a()).next();
Выходы,
class method
generator method
При добавлении прототипов к i.b, а вызов new i.b() приведет к ошибке, потому что i.b не является конструктором,
Я могу сделать new i.a(), а this внутри *a получает другой контекст.
- Почему существует эта разница?
- Каков прецедент для прототипа в генераторах, определенных как методы?
