繁体   English   中英

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

[英]What is the difference between Object constructor and Global Object

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

  1. JavaScript中的所有对象都来自Object; 所有对象都从Object.prototype继承方法和属性,尽管它们可能被覆盖。
  2. 全局变量也是全局对象的自动属性(浏览器中的窗口等),..............

我们知道的是:我们知道JavaScript中的所有对象都是从作为对象的“对象”继承而来的! JavaScript中的所有对象都从其原型继承而来,包括像“ Array ”这样的内置对象的原型。

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

另一方面,当我们讨论Scopes时,我们有一个叫做全局作用域的东西,它本身就是全局对象的根作用域。 而且:

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

> window.__proto__

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

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

他们之间有什么关系吗?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM