【问题标题】:Babel/ES6 extended class methods undefinedBabel/ES6 扩展类方法未定义
【发布时间】:2016-05-13 22:35:30
【问题描述】:

目前我正在使用 Babel 在 ES6 中编写 Node.js 后端。不幸的是,我在扩展特定类时遇到了奇怪的行为。我在扩展类中定义的一些方法是未定义的。除非我使用 ES7 语法将它们绑定到一个属性。

这是给我这种奇怪行为的实际代码:

import { Router } from 'express';

class MyCustomRouter extends Router
{
    constructor() {
        super();

        this.methodWorks();  // works like a charm.
        this.methodDoesnt(); // throws TypeError: _this.methodDoesnt is not a function
    }

    methodWorks = () => {
        // some content
    }

    methodDoesnt() {
        // some content
    }
}

这实际上是从expressjs 库扩展Router。所以现在我只是好奇是否有人可以解释这种行为和/或是否有办法解决这个问题。

【问题讨论】:

  • 我同时使用 Express 4.13.3Babel 6.4.6使用插件 es2015stage-0stage-1stage-2stage-3 .

标签: express ecmascript-6 babeljs ecmascript-2016


【解决方案1】:

我查看了 ExpressJS 本身的代码以找到一些解释。显然他们喜欢从Router 的构造函数返回一个全新的和不同的上下文。这就解释了为什么this 完全不同并且不包含我的方法......

【讨论】:

    猜你喜欢
    • 2016-06-01
    • 2015-07-25
    • 2016-05-24
    • 2019-03-21
    • 2018-06-29
    • 2019-01-21
    • 2017-06-29
    • 2016-11-17
    • 2017-07-06
    相关资源
    最近更新 更多