[英]What is the difference between Object constructor and Global Object
我对JS中的“全局对象”(窗口)和“对象”构造函数感到困惑。 令人困惑的部分是当我读到类似的句子时,一个是在阅读有关范围的时候,另一个是在我阅读JavaScript中的对象和继承时:
我们知道的是:我们知道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.prototype
是Object
函数的一个属性,它定义了内置原型链的根 。 大多数 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.