我对JavaScript this
参考情况感到困惑。
我正在研究一个在对象方法中声明函数的代码。 (原因是整理对象方法中的代码,同时保持函数对方法是私有的。)
以下是重新解决问题的实验。
我发现this
内的greeting
函数指的是窗口范围,而不是 person 范围。
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
引用问候语方法中的 window 范围?
提前感谢您的帮助。
答案 0 :(得分:7)
this
与范围无关。它由 context 决定。
greeting()
调用没有上下文的函数,因此this
是默认对象(浏览器中为window
)。
答案 1 :(得分:4)
答案 2 :(得分:2)
尝试person.nickname,这是指您案例中的var问候语