Tim*_*ott 27 javascript ecmascript-6
这有效:
import {bar} from './foo';
bar();
// foo.js
module.exports = {
bar() {}
}
Run Code Online (Sandbox Code Playgroud)
这有效:
import foo from './foo';
foo.bar();
// foo.js
export default {
bar() {}
}
Run Code Online (Sandbox Code Playgroud)
那么为什么这不起作用呢?
import {bar} from './foo';
bar();
// foo.js
export default {
bar() {}
}
Run Code Online (Sandbox Code Playgroud)
它抛出TypeError: (0 , _foo.bar) is not a function.
Nel*_*ung 60
当你有
export default {
bar() {}
}
Run Code Online (Sandbox Code Playgroud)
导出的实际对象具有以下形式:
exports: {
default: {
bar() {}
}
}
Run Code Online (Sandbox Code Playgroud)
当您进行简单导入(例如import foo from './foo';)时,您实际上是在导入中获取默认对象(即,exports.default).当你运行babel编译到ES5时,这将变得很明显.
当您尝试导入特定功能(例如,import { bar } from './foo';)时,根据您的情况,您实际上是尝试获取exports.bar而不是exports.default.bar.因此bar函数未定义的原因.
当您只有多个导出时:
export function foo() {};
export function bar() {};
Run Code Online (Sandbox Code Playgroud)
你最终会有这个对象:
exports: {
foo() {},
bar() {}
}
Run Code Online (Sandbox Code Playgroud)
因此import { bar } from './foo';会起作用.这是类似的情况,module.exports您基本上存储如上所述的导出对象.因此,您可以导入条形函数.
我希望这很清楚.
| 归档时间: |
|
| 查看次数: |
21975 次 |
| 最近记录: |