最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

javascript - ES6 classes, with parent in different file, and node.js? - Stack Overflow

matteradmin12PV0评论

What is the right way to use a class defined in one file and extend it another, in node.js?

Currently I have:

'use strict'

class BasePageHandler {

    constructor(app, settings, context) {

    }
}

return module.exports;

In the 'child' class file I have:

'use strict'

var BasePageHandler = require ('./../BasePageHandler.js');

class FrontpagePageHandler extends BasePageHandler {
    constructor(app, settings, context) {
         super(app, settings, context);
         this.settings = settings;
         this.context = context;
    }
}

This fails with the following error:

TypeError: Class extends value #<Object> is not a function or null

Note, if I have the BasePageHandler in the same file then it works, so it is really when the class is in another file I have an issue.

Currently using node 4.4.0.

What is the right way to use a class defined in one file and extend it another, in node.js?

Currently I have:

'use strict'

class BasePageHandler {

    constructor(app, settings, context) {

    }
}

return module.exports;

In the 'child' class file I have:

'use strict'

var BasePageHandler = require ('./../BasePageHandler.js');

class FrontpagePageHandler extends BasePageHandler {
    constructor(app, settings, context) {
         super(app, settings, context);
         this.settings = settings;
         this.context = context;
    }
}

This fails with the following error:

TypeError: Class extends value #<Object> is not a function or null

Note, if I have the BasePageHandler in the same file then it works, so it is really when the class is in another file I have an issue.

Currently using node 4.4.0.

Share Improve this question asked Mar 30, 2016 at 21:15 Andre MAndre M 7,5249 gold badges61 silver badges105 bronze badges 1
  • You may want to use ES6 native modules with the Common JS transform plugin for Babel, instead module.exports. That way, your code will stay future-ready for when Node implements modules natively. – Dan Dascalescu Commented Oct 3, 2016 at 1:51
Add a comment  | 

2 Answers 2

Reset to default 39

You need to correctly export your class inBasePageHandler.js file:

module.exports = BasePageHandler;

The accepted answer is technically fine, but really if you're using ES6 then you should go all in and use ES6 export/import.

/*jshint esversion: 6 */

class BasePageHandler {
    constructor(app, settings, context) {
    }
}

export default BasePageHandler;

and then:

/*jshint esversion: 6 */

import BasePageHandler from './../BasePageHandler.js';

class FrontpagePageHandler extends BasePageHandler {
    constructor(app, settings, context) {
         super(app, settings, context);
         this.settings = settings;
         this.context = context;
    }
}
Post a comment

comment list (0)

  1. No comments so far