14

我对 JavaScriptthis参考情况感到困惑。

我正在编写在对象方法中声明函数的代码。(原因是整理对象方法中的代码,同时保持方法私有的函数。)

以下是重现我的问题的实验。

我发现thisinsidegreeting函数是指窗口范围而不是人员范围。

var person = {
    nickname: "Makzan",
    sayHi: function() {
        console.log(this);
        var greeting = function() {
            console.log(this);
            return "Aloha " + this.nickname;
        }
        console.log(greeting());
    }
}
person.sayHi();

(jsfiddle 中的相同代码:http: //jsfiddle.net/makzan/z5Zmm/

这是浏览器中的日志结果:

> Object
> Window
Aloha undefined 

在 JS 中,我知道这个引用很棘手。我可以通过使用.call方法来改变范围,使这段代码工作。

var greeting = (function() {
    console.log(this);
    return "Aloha " + this.nickname;
}).call(this);

但是,我很想知道为什么默认情况下在问候this方法中引用窗口范围?

提前感谢您的所有帮助。

4

3 回答 3

12

this与范围无关。它由上下文决定。

greeting()调用没有上下文的函数,this默认对象也是如此(window在浏览器中)。

于 2013-04-05T10:27:50.530 回答
4

,this引用与范围无关,它取决于调用上下文。

根据MDN 文档

一般来说,当前作用域中绑定到 this 的对象是由当前函数的调用方式决定的

于 2013-04-05T10:29:44.427 回答
2

试试 person.nickname,这指的是你的情况下的 var 问候语

于 2013-04-05T10:27:40.650 回答