为什么在ES6模块中导出的对象有未定义的方法?

Jac*_*cob 5 node.js ecmascript-6 babeljs

我在ES6模块中定义了一个ES6类,它导出该类的实例:

class MyObject {
  constructor() {
    this.propertyA = 1;
    this.propertyB = 2;
  }

  myMethod() {
    doStuff();
  }
}

var theInstance = new MyObject();
export default theInstance;
Run Code Online (Sandbox Code Playgroud)

当我导入这个模块时,myMethodundefined:

import * as theObject from './my/module';

theObject.myMethod(); // Error! undefined is not a method.
Run Code Online (Sandbox Code Playgroud)

构造函数中定义的属性确实存在.就好像排除了对象的原型,只导出了它的成员.

我要求'babel/register'.

为什么导出此对象不能正常工作?

Jac*_*cob 7

我问了之后我才知道这件事.它看起来像有之间的差异import * as foo from 'module'import foo from 'module'.这有效:

import theObject from './mymodule';
Run Code Online (Sandbox Code Playgroud)

所以这不是导出错误的问题,而是导入错误.

  • 是.`import x from'...'`导入**默认**导出.这就是你所拥有的(`export default new MyObject()`).`import*as x from'...'`导入所有**名为**的导出作为对象的属性.你可以通过'import {foo,bar}从'...'`导入一个子集.命名导出的形式为`export function foo(){}`或`export var bar = ...;`或`export {abc,xyz}`. (2认同)