JavaScript全局对象?

JavaScript全局对象?,javascript,Javascript,“this”的值是指下面程序中的全局对象还是对象“o” 更重要的是,我可以运行什么代码来测试“this”的引用是什么 它指的是全局对象(窗口) 编辑:实际上,它将同时引用全局对象和o,因为它们是相同的o将引用从F()返回的对象,这是从C()返回的对象,这是窗口对象;) 您可以调用console.log(this)来找出它引用的对象。它应该为您提供控制台上对象的所有方法的列表,您应该能够从中推断出它是哪个对象。 要在Firefox中实现这一点,您需要Firebug。我不知道 更新: 。如果只想引用

“this”的值是指下面程序中的全局对象还是对象“o”

更重要的是,我可以运行什么代码来测试“this”的引用是什么


它指的是全局对象(
窗口

编辑:实际上,它将同时引用全局对象
o
,因为它们是相同的
o
将引用从
F()
返回的对象,这是从
C()
返回的对象,这是
窗口
对象;)

您可以调用
console.log(this)
来找出它引用的对象。它应该为您提供控制台上对象的所有方法的列表,您应该能够从中推断出它是哪个对象。
要在Firefox中实现这一点,您需要Firebug。我不知道

更新:

。如果只想引用更高范围的
,则必须将其显式分配给变量。例如:

function F() {
    var that = this; 
    function C() { 
        console.log(that);
    } 
    C();
}

引用程序中的全局对象。要获取
this
以引用
F
的实例,请尝试

function F() { 
    function C() { 
        return this;
    } 
    return C.call(this); // call C with the object of F as a context
} 

var o = new F();
在Chrome上,您只需输入要检查的变量,它的值就会被记录下来。它类似于执行
控制台.log(对象)
,但更易于使用。下面是在Chrome中运行此代码示例的屏幕截图。最后一条语句
o
的值会自动打印,我再次打印了它,只是为了确定。它记录了引用浏览器上全局窗口对象的
DOMWindow


要在其他答案中添加:

调用函数时,
根据调用方式设置此
。如果使用
myfunc.call
myfunc.apply
调用它,则
设置为第一个传递的参数。如果以“点”形式调用,即
myObject.myfunc()
设置为点之前的任何值

此规则有一个例外,即可以使用
bind
烘焙
this
的值,在这种情况下,它将是任何已绑定的值。i、 e.在
var boundfunc=myfunc.bind(myobj)中
然后,无论何时调用
boundfunc
,这就像调用
myfunc
一样,但是使用
this
引用
myobj
,而不考虑其他任何内容。下面是一个这样做的示例:

function F() { 
    var C = function() { 
        return this;
    }.bind(this);
    return C();
} 

var o = new F();

如果这些情况都不适用,那么
始终是全局对象(
窗口
如果您在浏览器中),或者,如果您处于严格模式,则它是
未定义的

我认为,由于“this”在函数F()中,且函数F()被分配给对象0,然后它可能会以闭包类型的方式引用对象O。@Michael:
这总是很特别的。您只能通过将其分配给另一个变量来引用更高范围的
。您调用的任何函数,如
func()
都会将
this
设置为全局对象。非常感谢。正如我告诉Felix King的那样,我认为既然“this”在函数F()中,而且函数F()被分配给对象0,那么它可能会以闭包类型的方式引用对象O。
这个
有点古怪,在函数中有特殊的含义,因此它不遵循闭包规则。当然,您可以将其分配给具有不同名称的变量,然后在函数中引用该变量,但不能
this
function F() { 
    var C = function() { 
        return this;
    }.bind(this);
    return C();
} 

var o = new F();