ES6父类覆盖子原型

时间:2018-10-26 06:07:02

标签: javascript node.js express ecmascript-6

我决定为Express服务器编写ES6类,但扩展的Express会覆盖子原型,因此无法使用在构造函数外部定义的方法和道具。查看代码:

import Express from 'express'
export default class Server extends Express {
    constructor(options) {
        super(options.expressOptions || {})
        super.use(cookieParser()) // TypeError: (intermediate value).use is not a function
        this.use(bodyParser.json()) // This definition works cause of overridden prototype
        this.use(Express.static('static'))

        this.test() // TypeError: this.test is not a function
        this.test1 = '123' // Contains in Server final prototype
    }
    test() {
        console.log('test')
    }
}

还有超类定义的问题。我不知道如何保存子原型。如果您有帮助,那将是非常宝贵的。

1 个答案:

答案 0 :(得分:2)

再次查看这个问题,我发现了问题。

express不是构造函数。

您将express视为您使用new Express调用的构造函数。这不是它的工作方式:您仅使用const app = express()进行调用。实际上,express是一个函数(here's the source code),它以一种老式的(非ES6)方式为您创建对象。

据我所知,不可能对任何核心Express对象进行子类化。我猜您可以使用类来包装Express框架对象,但是对我来说,这似乎并不直观。