this 在异步对象方法中

Kri*_*ari 5 javascript this async-await babeljs ecmascript-2017

我使用 babel-polyfill/babel-preset-es2017 创建了一个使用异步函数方法的对象,但是我遇到了以下问题this

let obj = () => {
    return {
        doAsync: async () => {
            let thing = await longProcess()
            return this.transform(thing)
        },

        transform: (thing) => {
            return psuedoCodeTransform(thing)
        }
    }
}

let instance = obj()
instance.doAsync()
// TypeError: cannot read property 'transform' of undefined`.
Run Code Online (Sandbox Code Playgroud)

这是否在 ES2017 中描述过,babel-polyfill/regeneratorRuntime 问题?

Jos*_*eph 5

箭头函数不创建自己的上下文。他们没有自己的thisthis将引用封闭范围的上下文。在这种情况下(无意双关语),this根本不指代同一个对象instance

如果您登录thisinside doAsync,您会注意到它是window全局的。

  • 有趣的。我在 Angular 服务构造函数中执行此操作,它给了我 `console.log(this) // undefined`。这就是让我失望的原因。 (2认同)