JavaScript全局对象?

时间:2011-03-21 07:31:37

标签: javascript

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

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

function F() { 
    function C() { 
        return this;
    } 
    return C();
} 

var o = new F();

3 个答案:

答案 0 :(得分:12)

它指的是全局对象(window)。

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

您可以致电console.log(this)找出它引用的对象。它应该为您提供控制台上对象的所有方法的列表,您应该能够从中推断出它是哪个对象。
为了在Firefox中工作,你需要Firebug。不知道IE。

<强>更新

@Anurag already showed you how to explicitly set this。如果您只想引用更高范围的this,则必须明确地将其分配给变量。例如:

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

答案 1 :(得分:2)

this指的是程序中的全局对象。要让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上,您只需输入要检查的变量,其值就会被记录下来。它与执行console.log(object)类似,但更容易使用。这是在Chrome中运行此代码示例的屏幕截图。最后一个语句o的值会自动打印出来,我再次打印它,只是为了确定。它记录了DOMWindow,它引用了浏览器上的全局窗口对象。

enter image description here

答案 2 :(得分:0)

要添加其他答案:

调用函数时,this的设置取决于调用方式。如果使用myfunc.callmyfunc.apply调用它,则this将设置为第一个传递的参数。如果以“虚线”形式调用,即myObject.myfunc(),则this设置为点之前的任何内容。

此规则有一个例外,即可以使用this烘焙bind的值,在这种情况下,它将是绑定的任何内容。即在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始终是全局对象(如果您在浏览器中,则为window),或者,如果您处于严格模式,则为undefined 1}}。