代码之家  ›  专栏  ›  技术社区  ›  Jim Puls

为什么window与internetexplorer中的window.self不同?

  •  24
  • Jim Puls  · 技术社区  · 16 年前

    self 属性不完全等于窗口本身?

    在Safari、Firefox和friends中,结果如我所料:

    > window == window.self
      true
    > window === window.self
      true
    

    不过,在Internet Explorer中情况并非如此:

    >> window == window.self
       true
    >> window === window.self
       false
    

    有人能解释这种不一致吗?到底什么是 自己

    2 回复  |  直到 16 年前
        1
  •  17
  •   bobince    16 年前

    还不止这些, window!==window.window !

    Moz ); 它们通常用于呈现不同的视图 window 从内部和外部它自己的代码。

    内部窗口保存全局变量和特定于文档的成员。外部窗口可以通过如下窗口引用访问[cross frame-]脚本 frames[n] parent , opener ,显然 self . 它绑定到所有者视口(浏览器窗口/框架),因此,例如,当您将iframe导航到新文档时,父文档仍会看到相同的标识 对象在其iframe中。

    在一个合理的浏览器对象模型设计中,会有单独的对象来实现这一点,但是当JavaScript最初由Netscape组合在一起时,很少考虑优雅性,导致这个和许多其他接口过载过多( form 包含一个名为 submit

    出现 成为脚本的单个对象,即使它不在下面。在IE中,有时面具会滑落:好像在说 窗口 === 靠着外窗。

    窗口 this ,检索作为内部窗口的全局变量scope对象。

        2
  •  4
  •   Crescent Fresh    16 年前

    问得好。它是用 document document.parentWindow 也是:

    window == document; // true
    window === document; // false
    
    window == document.parentWindow; // true
    window === document.parentWindow; // false
    

    不过,对我来说最大的wtf是:

    window == document; // true
    document == window; // false
    

    你可以换掉 window 具有 this 在上述任何一个例子中(并停留在全球范围内)都有相同的结果。它使 ==

    我无法理解它为什么会这样。