为什么可以在Vue.prototype上添加全局属性?

我了解到可以通过在Vue.prototype上添加全局属性,实现组件共享,但是这样添加在Vue的原型上之后,如果在浏览器里运行,其他使用Vue的网站也会引用Vue,这样不会造成冲突吗?

问题比较傻,还望各位大神不吝赐教


回答:

如果是微前端,免不了会有冲突。但是一般这种情况指 Vue 被放在 window 上,其他应用使用的 extrenals 。

现在一般来说应用都是用了一些打包工具,比如说 webpack,他们可以把 Vue 限制在自己的产物作用域中。

这样的话,即使是多个应用,也不会互相影响的。

当然,这个问题在 Vue2 可以使用 Vue.extend 创建一个子类来规避。Vue3 的话,子类是 createApp 创建,在写法上,天然支持隔离。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

楼上讲解很专业,我再来通俗易懂的解释一下。你创建的这个vue项目是通过一个函数创建的,别的网站的vue也是通过一个函数创建的。这两个函数虽然执行结果一样,但它们两个其实是相互独立的个体。
再直接点说,他们两个压根没有任何关系,只是都用了vue这个框架而已。


回答:

人话版:你和我开的同一款车,我把车改装了和你有啥关系?

Vue也是同理的,虽然都是用的Vue,但是并不是同一个Vue文件。
就算我和你从同一个CDN引入的Vue文件,你去修改引入的Vue原型链也不会影响到CDN服务器上面的Vue文件,而是你读取完之后在内存的那个Vue,所以我读取的还是原本的那个Vue文件,你的修改并不会影响我的代码,也没办法影响到我,就和我最开始打的比方一样。

实例化部分可以看楼上的回答。另外就算是使用的同一个Vue文件除非你去修改了Vue源码,不然最后即使你修改了原型链也不会影响到其他的页签。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

以上是 为什么可以在Vue.prototype上添加全局属性? 的全部内容, 来源链接: utcz.com/p/933937.html

回到顶部