在javascript中,window和this.window有什么区别

What is the difference between window and this.window, in javascript?

本文关键字:window 什么 区别 this javascript      更新时间:2023-09-26

我正在研究一个复杂的JavaScript,它正在对对象和脚本进行各种运行时/动态操作。在这个过程中,我正在学习关于Javascript及其特质的各种细节。

不过,这个让我难倒了。有没有出现过这样的情况

window !== this.window; //true

换句话说,你什么时候会写这个.window而不是直接出窗?

"有没有window !== this.window; //true的情况?"

当然,每当this引用没有.window属性或具有不指向全局对象的.window属性的对象时(假设浏览器环境window是全局对象)。

"...你什么时候会写this.window而不是直接写window

this引用一个对象时,其中.window属性预计不是对全局的引用。

this不像在 C++ 和 Java 中那样在 JavaScript 中隐式搜索名称。

在 JavaScript 中,引用foo的东西而不是 this.foosomeobject.foo ,按顺序尝试任何var声明的变量,然后是全局命名空间。

this.var仅查找this的成员(及其原型,以及原型的原型等)

在脚本的顶层,this 引用默认的全局命名空间,即 window 对象,在调用带有 foo.meth() 的方法之前,这是您停留的地方。 奇怪的是,window包含一个名为window的成员,它指向自己。 所以你一般可以去:

window.window.window.window.location = "some_url"

如果你愿意。 事实上,你假设的很多名字"就在那里"是全局对象的成员,例如

Object === window.Object

如果你喜欢你可以说

var window;

声明一个名为 window 的变量,该变量在该代码块中隐藏全局窗口。 但不要那样做。

我相信您实际上也可以更改全局命名空间是什么,但我不记得如何更改。

嗯,这是一个重复的,但是当你在全局范围(err)中时,this指的是全局范围,并且全局范围是window。(所以this == windowwindow.window == window都是真的)

如果您所在的函数用作构造函数,例如 ( new Pie() ),this不再引用全局范围,而是引用创建的对象。this实际上取决于您在何处运行代码。