如题,新增一个模块eventBus,例如:
export default new Vue()
现在我们有2个组件,分别是a.vue和b.vue,分别导入上面模块
import eventBus from './eventBus.js'
请问得到的eventBus对象是同一个吗?还是不同的2个对象?
如题,新增一个模块eventBus,例如:
export default new Vue()
现在我们有2个组件,分别是a.vue和b.vue,分别导入上面模块
import eventBus from './eventBus.js'
请问得到的eventBus对象是同一个吗?还是不同的2个对象?
在工程化项目中,不同组件内导入同一个模块,得到的导出对象是否是同一个对象,取决于模块的导入方式和模块的导出方式。
对于你的具体例子,如果eventBus.js
模块中使用了export default new Vue()
导出一个新的Vue实例,那么在导入时,这个Vue实例会被单独创建。即使在不同的组件中导入这个模块,得到的也是不同的Vue实例。
这是因为使用export default
导出的模块在每次导入时都会创建一个新的副本。这意味着如果你在多个组件中导入这个模块,你得到的将是多个独立的实例,而不是同一个实例。
例如,以下代码片段显示了导入的是同一个模块,但得到的export对象是不同的:
// eventBus.js
export default new Vue()
// a.vue
import eventBus from './eventBus.js'
console.log(eventBus === eventBus) // 输出:false
// b.vue
import eventBus from './eventBus.js'
console.log(eventBus === eventBus) // 输出:false
在上述示例中,我们在a.vue和b.vue中都导入了eventBus模块,但得到的是两个完全独立的Vue实例。所以,eventBus === eventBus
的结果是false
。这意味着它们不是同一个对象。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
导入模块时执行的代码只会执行一次,并且被导出的对象实例会被缓存起来供后续导入使用。因此,每次导入相同的模块时,都会得到同一个被导出的对象实例
例如 :
无论被多少文件 import 只会被执行一次;
你如果不觉得不正确 可以做个测试;
example : Example.ts
然后用其他文件导入Example.ts 然后打印 time是否是固定值即可。