相关文章推荐
强健的围巾  ·  Python字典中的可行列表·  9 月前    · 
有胆有识的自行车  ·  Python 异步IO - 知乎·  12 月前    · 
绅士的匕首  ·  new ...·  1 年前    · 
完美的蟠桃  ·  WPS VBA及Excel VBA ...·  1 年前    · 

在面向对象的语言中,万物皆对象。那博主就想问有没有母对象抑或是根对象,是各种对象的老祖宗。不好意思!那就必须谈到Global与window对象

Global对象

js的对象都是俄罗斯套娃,大的套小的。在es标准中Global对象要在进入执行环境之前就已创建,它是所有对象的根对象,其他对象都是它的属性或者属性的属性。
Global是表示功能的词,不代表具体的对象名,事实上并不一定存在Global对象,但是每个具体的宿主环境都需要有一个Global对象,例如:浏览器中的window对象就是global类对象,所有其他对象都是window对象的属性或其属性的属性,例如,String,Number、Boolean、Array、RegExp等对象都是window的属性,就连Object和Function也都是window属性对象。

console.log(Object.getOwnPropertyNames(window))

在这里插入图片描述
在浏览器打开窗口,输入这行代码,就会发现完整的window属性列表

Window对象的特殊性

浏览器的Global对象window是使用Window对象创建出来的,Window对象时function类型,window对象是object类型。

不可以创建对象

我们自己创建的function都可以使用new关键字,但是Window对象不可以用于创建对象。除了Window对象不能创建实例对象之外,一些function也不能。比如:Math专门作数学运算的。

不可以作为方法调用

Window不可以作为方法调用。在程序中直接调用Window()也是不可以的

变量就是属性

最外层定义的变量就是全局变量,它会自动称为window对象的属性。而在普通function中变量和实例对象的属性是完全没关系的两类数据。

<script>
	box.onmousewheel = mousewheelhandler;
	function mousewheelhandler(event) {
		if(event.wheelDelta) {
			var direction = event.wheelDelta>0?1:-1;
		}else{
			var direction = event.detail>0?-1:1;
		box.innerHTML = direction;	
</script>

在这里插入图片描述
从这个例子中可以看出,最外层定义的变量和this的属性及全局对象window的同名属性都是同一个,可以相互操作。但是,在我们自定义的function函数体内变量和属性之间存在严格区分,不可以相互调用。

代码如下(示例): console.log(globalThis); // Window {window: Window, self: Window, document: document, na. [[]]中的属性是内部属性,JS不能直接访问 [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者把属性修改为访问器属性[[Enumerable]] 能否通过for-in属性返回属性。[[Writable]] 表示能否修改属性的值[[Value]] 包含这个属性的的值defineProperty() 接受三个参数:对象 属性的名字和一个描述符 Global对象 不属于任何其他对象的属性和方法,最终都是Global对象的属性和方法。如 parseFloat( )、parseInt( )、escape( )、unescape( )、isFinite( )、isNaN( )、eval( )、encodeURI()和 encodeURIComponent(),实际上全都是 Global对象的方法。 所有在全局作用域中定义的属性和函数,也都是... globaljavascript运行时所在宿主环境提供的全局对象 window对象是浏览器的一个web api,可以说是global在浏览器中的具体表现 global对象是单体内置对象,即不依赖宿主环境的对象,而window对象依赖浏览器 刚学习flink的同学可能会有疑惑,GlobalWindows、windowwindowAll到底有什么关系?GlobalWindows和windowAll的并行度都是1吗?windowwindowAll的区别是什么?看了这篇文章,你将完全明白它们之间的区别与联系。 本文章综合了很多地方对global和widow区别的解释,我加以挑选再结合我自己的理解以及遇到的问题写出来的。可能比较乱,但是全部看完或许对globalwindow对象的理解还是有帮助的。 一个关于windowglobal区别的链接,可以更方便去理解:https://segmentfault.com/q/1010000003054375 关于定义和声明的区别:http:// JS时面向对象的语言,或者说它本身就是一个大对象,就像一个大箱子里面装着很多大盒子,每个大盒子里面都装着小盒子…那么最顶层的箱子是什么呢?这个对象在ES标准中叫做Global对象。ES标准中规定Global对象要在进入执行环境前就已创建,它是所有对象的根对象,其他对下个你都是它的属性或者属性的属性。 **这里的Global是表示功能的词,不代表具体的对象名。**事实上并不一定存在Global对象,但是每个具体的宿主环境都需要有一个Global对象,例如,浏览器中的window对象就是Global对象,所有其 <ref *1> Object [global] { global: [Circular *1], clearInterval: [Function: clearInterval], clearTimeout: [Function: clearTimeout], setInterval: [Function: se (1)在JavaScript中,一个浏览器窗口就是一个window对象。 (2)一个窗口就是一个window对象,这个窗口里面的HTML文档就是一个document对象,document对象window对象的子对象window对象的子对象分很多种: globalwindow什么关系,你会疑问吗?BOM的核心对象window,他表示浏览器的一个实例。在浏览器中,window对象有双重角色,它既是通过javaScript访问浏览器窗口的一个接口,又是ECMAScript规定的global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以window作为其global对象,因此有权访问parseInt()等方法。