Javascript 窗户和窗户有什么区别?

Javascript 窗户和窗户有什么区别?,javascript,dom,Javascript,Dom,什么是窗口 以下是我在Chrome控制台上看到的内容: window Window {top: Window, window: Window, location: Location, external: Object, chrome: Object…} Window function Window() { [native code] } 窗口是用于创建窗口的构造函数 要查看这一点,请尝试警报(window.constructor==window)是一个函数,

什么是
窗口

以下是我在Chrome控制台上看到的内容:

    window
    Window {top: Window, window: Window, location: Location, external: Object, 
chrome: Object…}

    Window
    function Window() { [native code] }

窗口
是用于创建
窗口
的构造函数

要查看这一点,请尝试
警报(window.constructor==window)

是一个函数,如您所见。它是windows的构造函数(但不能直接使用构造函数构建新窗口,通常使用函数)<代码>窗口。原型(prototype因此保存了可以在窗口上调用的方法)

window
是包含
window
实例的全局变量,它表示包含文档的浏览器窗口(通常不是真正的“窗口”,而是现代浏览器中的选项卡)

你可以查一下

window instanceof Window


Chrome浏览器的控制台输出:

console.log(window instanceof Window);      // true
console.log(window.constructor === Window); // true
console.log(this);   // Window {document:document, alert:ƒ, setTimeout:ƒ,..}
console.log(window); // Window {document:document, alert:ƒ, setTimeout:ƒ,..}
console.log(Window); // ƒ Window() { [native code] }

Window.foo=“Bar”;foo类型
->
未定义“
。所以不,这不起作用。@Felix Kling我一直在通过
Window.foo
访问变量,所以我从来没有注意到直接引用as
foo
的问题。好吧,这只是表明在
Window
上设置属性是有效的,这并不奇怪(因为它是一个对象)。同意,似乎我应该早点注意到发生了什么。在将来,像这样的问题可以通过做一些研究来改进,比如查找。这是完全有意义的。因此,当我向
窗口
添加变量时,它实际上是将其存储在
窗口
对象中,而不是像使用
Window.foo
那样实际生成全局变量。正确。Javascript区分大小写;它们只是大小写不同这一事实是无关紧要的。要想进一步混淆,请尝试
Window.prototype
。为什么人们会说alert,为什么不说console.log?构造函数?为什么new Window()返回错误?@zloctb因为脚本不能以这种方式构建新窗口,它们必须使用Window.open函数。@zloctb:您可以执行
var x=Object.create(Window.prototype)
,而x现在是
Window
的一个实例,
x
与现有的
窗口
实例不同,因为它未“绑定”到浏览器中的当前窗口。因此,
窗口
还有几个本地属性。例如,
x.Location
将不存在于其他内容中。它是的副本,但您的答案实际上更好。我们是否应该将另一个问题作为这个问题的重复来结束?另一方面,另一个问题的措辞更为恰当。我将标记合并。
console.log(window instanceof Window);      // true
console.log(window.constructor === Window); // true
console.log(this);   // Window {document:document, alert:ƒ, setTimeout:ƒ,..}
console.log(window); // Window {document:document, alert:ƒ, setTimeout:ƒ,..}
console.log(Window); // ƒ Window() { [native code] }