为什么这个JavaScript示例指向全局对象(Window)?

时间:2010-06-01 17:18:24

标签: javascript

function F() {
    function C() { 
        return this;
    } 
    return C();
} 
var o = new F();

4 个答案:

答案 0 :(得分:7)

细分组件元素。

假设您要这样做:

function C() {
    return this;
}
var o = C();

此处显然没有对象上下文,因此thiswindow

在构造函数中包装该设置并不会改变直接调用C()的上下文中不涉及任何对象的事实。

答案 1 :(得分:2)

函数C()不是F的方法,你需要做的是这样的事情:

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

虽然这有点令人费解,但是你可以这样做来实现同样的目的:

function F() {}
var o = new F();

答案 2 :(得分:0)

C()不是f对象的方法。如同,您无法致电o.C();。如果这是有道理的。并且因为您返回C()的返回值而不是C的新实例,它将返回窗口对象。

答案 3 :(得分:0)

function F(){return this; }也将返回窗口。因此var obj = this。只要“这个”没有其他价值,它就不是“这个”的价值。

相关问题