Object构造函数和Global Object之间有什么区别

时间:2015-06-19 15:25:56

标签: javascript

我对JS中的“全局对象”(窗口)“对象”构造函数感到困惑。 令人困惑的部分是当我读到相似的句子时,一个是在读取范围时读取的,另一个是在我阅读JavaScript中的对象和继承时:

  1. JavaScript中的所有对象都来自Object;所有对象都从Object.prototype继承方法和属性,尽管它们可能被覆盖。
  2. 全局变量也是全局对象的自动属性(浏览器中的窗口等),.............。
  3. 我们所知道的是: 我们知道JavaScript中的所有对象都是从“对象”继承而来的,它是 root 对象! JavaScript中的所有对象都从其原型继承而来,包括内置对象的原型,如“数组”。

    Array.prototype.__proto__===Object.prototype  //True
    

    另一方面,当我们谈论Scopes时,我们有一个名为 global 范围的东西,它是根本范围,它本身称为全局对象。 而且:

    > Window.prototype.__proto__
    Result : EventTarget { addEventListener=addEventListener(),    removeEventListener=removeEventListener(),  dispatchEvent=dispatchEvent(),  more...}
    

    > window.__proto__
    
    Result : Window { addEventListener=addEventListener(),  removeEventListener=removeEventListener(),  dispatchEvent=dispatchEvent(),  more...}
    

    我知道他们可能是两个完全不同的问题。 那么什么是什么?哪导致哪?谁是谁?

    他们之间有什么关系吗?

1 个答案:

答案 0 :(得分:3)

Object构造函数是一个创建(或将基元转换为)对象的函数。

Object.prototypeObject函数的一个属性,它定义了内置原型链的根大多数 JavaScript对象最终都是从它继承的,尽管可以创建没有的对象。

全局对象是全局变量存在的地方。与大多数对象一样,它继承自Object.prototype(虽然这更像是事实上的标准;规范实际上并不需要它,但大多数引擎仍然会这样做)。因为Object构造函数绑定到全局变量,所以它也存在于此处。

请注意,在不同的运行时上下文中,全局对象也可以从其他对象继承,前提是它继续满足通常的要求。例如,在浏览器中,全局对象继承自Window(普通上下文)或WorkerGlobalScope(Web Workers)。

在许多情况下,全局对象也绑定到全局变量。历史上,浏览器在普通上下文中称为window,但self(最初是Web Workers的一部分)也在HTML5中标准化。与所有全局变量一样,这些名称成为全局对象的属性:在普通浏览器中,如果您真的想要,可以将其称为window.self.window.self.window