简体   繁体   中英

ES6 Parent class overrides child prototype

I decided to write ES6 class for Express server, but extended Express overrides child prototype, and there is no way to use methods and props that defined outside constructor. See code:

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')
    }
}

And problem with super class definition. I don't know how to save child prototype. It's will be very precious if you help.

Having looked again at this, I see the problem.

express is not a constructor.

You are treating express as if it were a constructor that you call using new Express . This is not how it works: you just call it with, for example, const app = express() . In fact, express is a function ( here's the source code ) that creates the object for you, in an old-fashioned (non-ES6) way.

As far as I am aware, it is not possible to subclass any of the core Express objects. You could, I guess, use classes to wrap the Express framework objects, but that doesn't seem intuitive to me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM