默认导出含常量与展开键值对的对象时,为何可通过导入名引用展开属性?
问题解答
咱们拆解代码逻辑就能明白其中的缘由:
1. service.js的默认导出是个合并后的新对象
你写的这段导出代码:
export default { myConst, ...keyValuePairs, };
会生成一个全新的对象,这个对象包含两部分内容:
- 一个名为
myConst的属性,对应你之前定义的const myConst对象; - 把
keyValuePairs里的所有键值对(key1: func1、key2: func2)直接展开到新对象中,相当于给新对象额外添加了key1、key2这两个属性。
2. consumer.js里的myConst只是导出对象的别名
在consumer文件中:
import myConst from 'service.js';
这里的myConst只是你给默认导出的那个新对象起的名字,和service.js里的const myConst变量完全是两回事——哪怕你改成import foo from 'service.js',用foo.key1照样能访问到对应的函数。
3. myConst.key1能生效的本质
你通过myConst.key1访问的,是导入的新对象上被...keyValuePairs展开进来的key1属性,和导出对象里的myConst属性没有直接关联,只是你给导入对象起的名字刚好和那个属性名重名了而已。
内容的提问来源于stack exchange,提问作者Chris Halcrow
相关产品推荐
相关产品推荐

