Javascript es6模块中导出对象的正确方法
我试图将my模块导出为对象,但导出它似乎是一种“反模式”() 所以我想知道导出一个对象然后将其用作Javascript es6模块中导出对象的正确方法,javascript,ecmascript-6,es6-modules,Javascript,Ecmascript 6,Es6 Modules,我试图将my模块导出为对象,但导出它似乎是一种“反模式”() 所以我想知道导出一个对象然后将其用作 从“/utils”导入utils ` utils.foo() 现在我是这样做的 /** a.js **/ function foo(){ //... } export { foo } /** b.js **/ import * as utils from "a"; utils.foo() 这样对吗?我是
从“/utils”导入utils
`
utils.foo()
现在我是这样做的
/** a.js **/
function foo(){
//...
}
export {
foo
}
/** b.js **/
import * as utils from "a";
utils.foo()
这样对吗?我是否保持摇树功能
谢谢如果要导入/导出的对象仅包含一些函数(由于
Utils
名称,我假定),则可以按如下方式单独导出函数:
export function doStuff1() {}
export function doStuff2() {}
然后像这样导入:
import {doStuff1, doStuff2} from "./myModule";
但是,如果要导出的对象除了保存方法外还保存状态,则应坚持使用简单的导出默认myObject
。否则,调用导入的方法将无法正常工作,因为对象的上下文将丢失
例如,以下对象应作为一个整体导出,因为对象的属性应保持封装状态。只有导入和调用increment
函数不会改变myObject
,因为无法提供对象的上下文(因为它不是作为一个整体导入的)
es6本机方法:
//file1.es6
导出常量myFunc=(参数)=>{
多斯塔夫(参数)
}
export const otherFunc=({param={}})=>{
doSomething({…param})
}
//文件2.es6
从“/file1.es6”导入{otherFunc}
将*作为MyLib从“/file1.es6”导入
MyLib.myfunc(0)
MyLib.otherFunc({who:'Repley'})
otherFunc({var1:{a1:1}})
等等。这不是常见的JS语法吗?
const myObject = {
counter: 0,
increment: function() {
this.counter++;
}
}
export default myObject;