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