缘由:
最近写代码的时候发现可以不用引用就可以调用一些全局方法,
这些方法是项目封装的一些公共方法,
然后就想看看这个项目是如何把这些公共方法挂在到全局的,
这一看不知道,看了吓一跳.
过程:
- 先找到这些公共方法的所在文件
- 然后发现这些文件被引入到了一个叫globa 的文件夹下
- golbal 在未被声明的情况下,直接将全局方法挂载在global 的属性下面
- 将global 文件引入App.js 实现公共方法挂载到全局
疑问:
过程3中 golbal为何在未被声明的情况下,可以将全局方法挂在到下面
import { generateUUID, GetParam, UFormatter,ServiceTime } from 'plugins/common'
global.generateUUID = generateUUID;
global.GetParam = GetParam;
global.ServiceTime = ServiceTime;
global.UFormatter = UFormatter;
可以看到,这里的代码根本没有声明global对象
结果:
- 在浏览器中直接打印global,直接报错
- 鼠标放到globa上面,vscode会弹出global属于module的引用
- 点开module引用的文件
- 发现global的接口定义
- 可以看到很多JavaScript的基础类型和我们平时可以直接引用的属性方法,都挂在到他的下面
思考:
1.我们平时不靠引用直接使用的 Date(),parseInt(),clearTimeout()等方法 是否均来自于global?
显然,确实是这样,这下属性全部挂在到 global 下,
未经声明的引用,确实会找到global 下面的属性
global是不能直接访问的,但是它下面的属性确实可以直接访问
**《JavaScript高级程序设计》**中谈到,global对象可以说是ECMAScript中最特别的一个对象了,因为不管你从什么角度上看,这个对象都是不存在的。从某种意义上讲,它是一个终极的“兜底儿对象”,换句话说呢,就是不属于任何其他对象的属性和方法,最终都是它的属性和方法。
我的理解是:global对象,在整个JavaScript中相当于神一样的存在,你直接调用它是调用不了的,但是它确实创造了很多可以被调用的属性和方法,这些属性方法都属于global对象,我们调用那些未经引用的属性方法,都会找到这个神,然后如果属于他所创造的方法,那么它就能帮你解决这个问题
如果不属于他的属性方法,那么他也无法替你解决,毕竟神只做管最基本秩序规则,而我们只需要在这个秩序之下做好自己的事情就行.
参考: https://blog.csdn.net/chenchunlin526/article/details/78908592