为什么DOM既有窗口又有自己?

hek*_*ran 5 javascript dom

为什么DOM有一个被调用的对象self而另一个被调用window它们是同一个东西?添加到混乱window中的属性称为self:

window === window.self === self
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我应该使用哪一个?

Sea*_*sey 5

self由javascript环境定义并指向[global]对象(但不是规范的一部分,因此可能不存在),window而是DOM规范的一部分.在大多数浏览器中,window它被用作[全局]对象,但并非总是如此.

self == window.self并不奇怪,因为它们是同一个对象 - 当self被查找时,它被发现是全局对象(window)的属性.所以它实际上是一样的window.self == window.self.

如其他地方所述,为了可靠地引用该[global]对象,您应该通过var global = this;在全局执行上下文中运行来定义它的sef .

  • 如果您知道执行上下文是在ECMAScript中构建的,那么它并不奇怪.毕竟,`self`属性必须定义在哪里可以访问?这就是`[global]`对象本身的属性.该属性实际指向`[global]`对象在这里并不真正相关. (2认同)
  • @hekevintran:*"等等是因为这里使用的`self`是一个全局变量,所有全局变量都是全局JavaScript对象的属性,浏览器也称为`window`?"*是的.事实上,全局变量`window`本身就是全局对象的属性,就像`self`一样,就像我的`global`例子一样.这是因为全局对象(浏览器上的`window`)是全局执行上下文的"绑定对象".http://www.ecma-international.org/publications/standards/Ecma-262.htm (2认同)