Методы, объявленные как методы (с использованием расширенных объектных литератур или классов 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
получает другой контекст.
- Почему существует эта разница?
- Каков прецедент для прототипа в генераторах, определенных как методы?