《JS原理、方法与实践》- Global与Window对象

简介: 《JS原理、方法与实践》- Global与Window对象

JS时面向对象的语言,或者说它本身就是一个大对象,就像一个大箱子里面装着很多大盒子,每个大盒子里面都装着小盒子....那么最顶层的箱子是什么呢?这个对象在ES标准中叫做Global对象。ES标准中规定Global对象要在进入执行环境前就已创建,它是所有对象的根对象,其他对下个你都是它的属性或者属性的属性。

**这里的Global是表示功能的词,不代表具体的对象名。**事实上并不一定存在Global对象,但是每个具体的宿主环境都需要有一个Global对象,例如,浏览器中的window对象就是Global对象,所有其他对象都是window对象的属性或其属性的属性。例如,Stirng,Number,Boolean,Array,RegExp等对象都是window的属性,就连Object和Function也是window的属性对象。

可利用:console.log(Object.getOwnPropertyNames(window));

查看widow包含的属性,亲测包含1102个,有些可能并没有什么意义,但是多为有意义的属性。

![](https://upload-images.jianshu.io/upload_images/2789632-e84a44f8aa2d9a7a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### Window对象的特殊性

浏览器的Global对象window是使用Window对象创建出来的,Window对象是function类型,window对象是obejct类型。用于创建window对象的Window对象跟我们自定义的function对象之间存在一些差别。

* 不可以创建对象:我们自己创建的function对象可以使用new关键字来创建相应的object类型实例对象,但是Window对象不可以用于创建对象。

* 不可以作为方法调用:Window也不可以作为方法来调用,也就是说,在程序中直接调用Window()也是不可以的,并且这种用法也没有实际意义。

* 变量就是属性:在最外层定义的变量也叫做全局变量,与在function中定义的其他变量存在很大的区别。在最外层定义的变量会自动称为window对象的属性,而在普通function中变量和实例对象的属性是完全没有关系的两类数据。

代码示例:

```

var v = 1;

// 通过修改this的属性可以改变全局变量的值

this.v = 2;

console.log(v); // 2

// 通过修改全局变量的值也可以修改window对象同名属性的值

v = 3;

console.log(window.v); // 3

// 我们自定义方法中变量和实例对象的属性是相互独立的

function Obj(){

var v = 2;

this.v = 5;

console.log(v); // 2

console.log(this.v); // 5

}

new Obj(); // 2

```

从上面的示例中可以看出,最外层定义的变量和this的属性及window的同名属性都是同一个,可以相互操作。但是,在我们自定义的function函数体内变量和属性之间存在严格区分,不可以相互调用。

###### 另外,window对象本身也是自己的一个属性

可利用语句查看:console.log(Object.getOwnPropertyNames(window));

![](https://upload-images.jianshu.io/upload_images/2789632-22a587fb1d40feaa.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

目录
相关文章
|
1天前
|
JavaScript 前端开发
在JavaScript中,函数原型(Function Prototype)是一个特殊的对象
JavaScript中的函数原型是一个特殊对象,它为所有函数实例提供共享的方法和属性。每个函数在创建时都有一个`prototype`属性,指向原型对象。利用原型,我们可以向所有实例添加方法和属性,实现继承。例如,我们定义一个`Person`函数,向其原型添加`greet`方法,然后创建实例`john`和`jane`,它们都能调用这个方法。尽管可以直接在原型上添加方法,但推荐在构造函数内部定义以封装数据和逻辑。
8 2
|
1天前
|
JavaScript 前端开发
JavaScript 提供了多种方法来操作 DOM(文档对象模型)
【5月更文挑战第11天】JavaScript 用于DOM操作的方法包括获取元素(getElementById, getElementsByClassName等)、修改内容(innerHTML, innerText, textContent)、改变属性、添加/删除元素(appendChild, removeChild)和调整样式。此外,addEventListener用于监听事件。注意要考虑兼容性和性能当使用这些技术。
6 2
|
3天前
|
JavaScript 前端开发
在JavaScript中实现模块化开发有多种方法
JavaScript模块化开发可通过CommonJS、AMD和ES6模块实现。CommonJS适用于服务器端,使用`require`和`module.exports`处理模块;AMD(如RequireJS)用于浏览器端,依赖`require`和`define`;ES6模块提供原生支持,使用`import`和`export`。选择方式需考虑项目环境、复杂度和技术栈。
10 4
|
3天前
|
JavaScript 前端开发
深入了解前端框架Vue.js的响应式原理
本文将深入探讨Vue.js前端框架的核心特性之一——响应式原理。通过分析Vue.js中的数据绑定、依赖追踪和虚拟DOM等机制,读者将对Vue.js的响应式系统有更深入的理解,从而能够更好地利用Vue.js构建灵活、高效的前端应用。
|
3天前
|
JavaScript 前端开发
JS tostring()和join()方法
JS tostring()和join()方法
7 1
|
3天前
|
存储 JavaScript 前端开发
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
深入了解JavaScript中的indexOf()方法:实现数组元素的搜索和索引获取
7 0
|
4天前
|
JavaScript 前端开发 索引
js添加、删除、替换、插入元素的方法
js添加、删除、替换、插入元素的方法
10 0
|
5天前
|
JavaScript 前端开发
JavaScript 循环方法详解
JavaScript 循环方法详解
18 1
|
5天前
|
JavaScript 前端开发
JavaScript数字方法详解
JavaScript数字方法详解
17 0
|
5天前
|
存储 JavaScript 前端开发
JavaScript对象方法详解
JavaScript对象方法详解
14 1