2014-01-22 2 views
0

Использование обычной ECMAScript вы можете сделать что-то подобное,В ES6, как вы получаете имя функции генератора внутри генератора?

function f() { console.log(this.constructor.name); } 
new f() // outputs `f` 

Однако небольшое изменение,

function* f() { console.log(this.constructor.name); } 
var g = new f(); 
g.next() // outputs `GeneratorFunctionPrototype` 

Есть в любом случае, чтобы получить имя генератора (f)?

+0

Я не думаю, что функция должна иметь имя, хотя можно было бы утверждать имя (внутри) является «е». Хотя это не сильный аргумент, 'Function.prototype.name' является нестандартным, а' constructor.name' - это просто артефакт нового объекта, а не функция. – user2864740

+0

Вам нужно использовать 'this'? – Knu

ответ

0

Вы можете использовать недвижимость callee объекта arguments. Однако Обратите внимание, что callee был удален из строгого режима ES5 (к сожалению, нет представления о ES6).

Так вы получите что-то вроде:

function* f() {console.log(arguments.callee.name);} 
var g = new f(); 
g.next() // outputs `f` 
Смежные вопросы