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