2014-01-22 41 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

我不認爲功能必須有一個名字,儘管有人可能會爭辯名稱(內部)是「F」。雖然不是一個強有力的參數,但「Function.prototype.name」是非標準的,「constructor.name」實際上只是新對象的一個​​人工產物,而不是函數。 – user2864740

+0

你必須使用'this'嗎? – Knu

回答

0

您可以使用arguments對象的屬性callee但是請注意,callee已從ES5嚴格模式中刪除(不幸的是,關於ES6不知道)。

所以,你會得到這樣的:

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