我正在研究一个复杂的 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.fooor someobject.foo,按顺序尝试任何var- 声明的变量,然后是全局命名空间。
this.var仅查找this(及其原型,原型的原型等)的成员
在脚本的顶层,this指的是默认的全局命名空间,即window对象,在您使用foo.meth(). window奇怪的是,它包含一个名为windowwhich 指向自身的成员。所以你一般可以去:
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在哪里运行代码。