我正在研究一个复杂的 JavaScript,它正在对对象和脚本进行各种运行时/动态操作。在此过程中,我正在学习有关 Javascript 及其特性的各种细节。
不过,这让我很难过。有没有这样的情况
window !== this.window; //true
换句话说,你什么时候会写 this.window 而不是直接写出 window ?
我正在研究一个复杂的 JavaScript,它正在对对象和脚本进行各种运行时/动态操作。在此过程中,我正在学习有关 Javascript 及其特性的各种细节。
不过,这让我很难过。有没有这样的情况
window !== this.window; //true
换句话说,你什么时候会写 this.window 而不是直接写出 window ?
“有没有这样的情况
window !== this.window; //true
”
当然,只要this
指的是没有.window
属性的对象或具有.window
不指向全局对象的属性的对象(假设浏览器环境window
是全局对象)。
“......你什么时候会写
this.window
而不是直接写出来window
?
当this
指的是一个对象,其中一个.window
属性预计不是对全局的引用。
this
不会像在 C++ 和 java 中那样在 javascript 中隐式搜索名称。
在 javascript 中,引用某些东西foo
而不是this.foo
or someobject.foo
,按顺序尝试任何var
- 声明的变量,然后是全局命名空间。
this.var
仅查找this
(及其原型,原型的原型等)的成员
在脚本的顶层,this
指的是默认的全局命名空间,即window
对象,在您使用foo.meth()
. window
奇怪的是,它包含一个名为window
which 指向自身的成员。所以你一般可以去:
window.window.window.window.location = "some_url"
如果你喜欢。实际上,您认为“就在那里”的很多名称都是全局对象的成员,例如
Object === window.Object
如果你喜欢你可以说
var window;
声明一个名为的变量,该变量window
在该代码块中隐藏全局窗口。但不要那样做。
我相信您实际上也可以更改全局命名空间,但我不记得如何了。
好吧,它是重复的,但是this
当您在全局范围(err)中时,它指的是全局范围,而全局范围是window
. (所以this == window
和window.window == window
都是真的)
如果您在一个用作构造函数的函数中,例如 ( new Pie()
),this
则不再指代全局范围,而是指所创建的对象。真正取决于您this
在哪里运行代码。