堆栈溢出JavaScript代码编辑器:全局对象';窗口';可直接访问

堆栈溢出JavaScript代码编辑器:全局对象';窗口';可直接访问,javascript,Javascript,我注意到在Stack Overflow的JavaScript代码编辑器中,全局对象有许多成员,包括普通的全局浏览器对象,窗口 当完整路径实际上是this.window.Promise时,它如何直接提供窗口的成员(例如Promise,如下所示) console.log('this在顶级作用域中:',this); console.log('窗口对象上的承诺构造函数,来自顶级作用域:',this.window.Promise); log('仍然,直接抓取承诺有效:',承诺)javascript中的关

我注意到在Stack Overflow的JavaScript代码编辑器中,全局对象有许多成员,包括普通的全局浏览器对象,
窗口

当完整路径实际上是
this.window.Promise
时,它如何直接提供
窗口的成员(例如
Promise
,如下所示)

console.log('this在顶级作用域中:',this);
console.log('窗口对象上的承诺构造函数,来自顶级作用域:',this.window.Promise);

log('仍然,直接抓取承诺有效:',承诺)javascript中的关键字“this”指的是当前执行上下文,不管它是什么。如果当前执行上下文是全局范围,则表示窗口。

javascript中的关键字“this”表示当前执行上下文,不管它是什么。如果当前执行上下文是全局范围,则指窗口。

,因为您看到的实际上是全局
窗口本身,其中包含一个自引用:

this === window
window.window === window
这就是它在每个浏览器中的表现,这并不是如此特殊的片段。因此,如果您像以下方式访问它,则无所谓:

Promise
window.Promise
this.window.Promise
this.window.window.Promise

因为您看到的实际上是包含自引用的全局
窗口本身:

this === window
window.window === window
这就是它在每个浏览器中的表现,这并不是如此特殊的片段。因此,如果您像以下方式访问它,则无所谓:

Promise
window.Promise
this.window.Promise
this.window.window.Promise

此===window//true
window
是全局范围,它本身在其中
window.window.window.window==window//true
此===window//true
window
是全局范围,它本身在其中
window.window.window.window==window//true
。谢谢你,乔纳斯。如果我在记录
这个
时看到的实际上是
窗口
对象,你知道为什么我不能在上面找到
承诺
构造函数吗?全局对象不应该实现ECMAScript定义的标准内置函数吗?如果
Promise
不在
窗口上,你知道它在哪里吗?@magnus如果你使用
console.log(this.Promise),你会得到什么
?您获得了
Promise
对象,但是如果您从
console.log(this)
获取记录的输出,并将其粘贴到文本/代码编辑器中,然后搜索
Promise
,则找不到任何对象(至少对我来说不是这样)<代码>设置超时
和其他Web API可见。它是不可枚举的属性。有趣。我做了
console.log(Object.getOwnPropertyNames(this))
,它同时打印
可枚举的
s和
不可枚举的
s,我得到了所有预期的匹配,包括
对象
函数
承诺
,等等。。让我感到不舒服的是,在我的Visual Studio代码编辑器(Windows框)console.log(obj)中,实际上也记录了不可枚举的内容。谢谢,Jonas。如果我在记录
这个
时看到的实际上是
窗口
对象,你知道为什么我不能在上面找到
承诺
构造函数吗?全局对象不应该实现ECMAScript定义的标准内置函数吗?如果
Promise
不在
窗口上,你知道它在哪里吗?@magnus如果你使用
console.log(this.Promise),你会得到什么
?您获得了
Promise
对象,但是如果您从
console.log(this)
获取记录的输出,并将其粘贴到文本/代码编辑器中,然后搜索
Promise
,则找不到任何对象(至少对我来说不是这样)<代码>设置超时
和其他Web API可见。它是不可枚举的属性。有趣。我做了
console.log(Object.getOwnPropertyNames(this))
,它同时打印
可枚举的
s和
不可枚举的
s,我得到了所有预期的匹配,包括
对象
函数
承诺
,等等。。让我感到不舒服的是,在我的VisualStudio代码编辑器(Windows框)console.log(obj)中,实际上也记录了不可枚举的内容。