【问题标题】:In ES6, how do you get the name of the generator function inside the generator?在 ES6 中,如何获取生成器内部的生成器函数的名称?
【发布时间】:2014-02-12 23:22:00
【问题描述】:

使用普通的 ECMAScript 你可以做类似的事情,

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)?

【问题讨论】:

  • 我不认为函数必须有一个名称,尽管有人可能会争辩说名称(内部)是“f”。虽然不是一个强有力的论点,Function.prototype.name 是非标准的,constructor.name 实际上只是新对象的产物 - 而不是函数。
  • 一定要用this吗?

标签: generator v8 ecmascript-harmony


【解决方案1】:

您可以使用arguments 对象的属性callee然而请注意callee已从 ES5 严格模式中删除(不幸的是,不知道 ES6)。

所以你会得到类似的东西:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多