为什么在这个javascript示例中会引用窗口对象?

为什么在这个javascript示例中会引用窗口对象?,javascript,this,Javascript,This,我试着理解我错在哪里了!我有一个小的javascript对象,如下所示: o = { fun: function (x) { return x(); }, fun2: function () { return this; } }; fun: function (x) { return x.call(this); }, 现在我在chrome调试器中触发下面的方法: o.fun(o.fun2); 这将返回一个窗口对象。我

我试着理解我错在哪里了!我有一个小的javascript对象,如下所示:

o = {
    fun: function (x) {
        return x();
    },

    fun2: function () {
        return this;
    }
};
fun: function (x) {
    return x.call(this);
},
现在我在chrome调试器中触发下面的方法:

o.fun(o.fun2);

这将返回一个窗口对象。我希望看到o对象。我想不出来。有人能给我解释一下吗?我真的很想知道javascript在幕后发生了什么。

这个的值是由调用函数的方式决定的,而不是由其他因素决定的。函数由初始化表达式定义为对象文字的一部分,这一事实完全没有区别

您可以确保
this
的值从如下“fun”传播:

o = {
    fun: function (x) {
        return x();
    },

    fun2: function () {
        return this;
    }
};
fun: function (x) {
    return x.call(this);
},

谢谢你的简短回答。正如我所知,当我运行“o.fun2()”时,我得到了“o”对象。好吧,这里发生的一切(正如我所知道的)就是我将输出直接指向“o.fun2”方法!谢谢,你说得对。对于像我这样有同样误解的人来说,问题在于“returnx();”行。启动函数或方法时,应记住,启动函数的方式指示此值。在这里我只写了“x()”。无论您在何处编写“x()”,不管它是在一个对象的方法体中还是在脚本标记的正下方,它始终引用窗口对象。