ES6类,父级在不同的文件中,还有node.js?

And*_*e M 21 javascript node.js

在node.js中使用在一个文件中定义的类并将其扩展为另一个文件的正确方法是什么?

目前我有:

'use strict'

class BasePageHandler {

    constructor(app, settings, context) {

    }
}

return module.exports;
Run Code Online (Sandbox Code Playgroud)

在'child'类文件中,我有:

'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;
    }
}
Run Code Online (Sandbox Code Playgroud)

此操作失败,并显示以下错误:

TypeError: Class extends value #<Object> is not a function or null
Run Code Online (Sandbox Code Playgroud)

注意,如果我在同一个文件中有BasePageHandler那么它可以正常工作,所以它真的是当这个类在另一个文件中时我遇到了问题.

目前使用节点4.4.0.

mad*_*ox2 33

您需要在BasePageHandler.js文件中正确导出您的类:

module.exports = BasePageHandler;
Run Code Online (Sandbox Code Playgroud)

  • 我很确定你也可以把它放在一行:`module.exports = class BasePageHandler {`这样,如果你重命名这个类,那么以后更改它的地方就少了1个. (3认同)

jon*_*ink 12

接受的答案在技术上很好,但是如果你使用ES6那么你应该全力以赴并使用ES6导出/导入.

/*jshint esversion: 6 */

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

export default BasePageHandler;
Run Code Online (Sandbox Code Playgroud)

然后:

/*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;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 顺便说一下,在ES6中不需要"使用严格" - 它默认是强制执行的. (7认同)