【发布时间】:2012-03-27 11:50:32
【问题描述】:
我有一个关于如何在嵌套函数场景中处理“this”指针的问题。
假设我将以下示例代码插入网页。调用嵌套函数“doSomeEffects()”时出现错误。我检查了 Firebug,它表明当我在那个嵌套函数中时,“this”指针实际上指向全局“window”对象——这是我没想到的。我一定没有正确理解某些东西,因为我认为既然我在对象的函数中声明了嵌套函数,它应该具有与函数相关的“本地”范围(即“this”指针将引用对象本身,如在我的第一个“if”语句中是怎样的)。
任何指针(没有双关语)将不胜感激。
var std_obj = {
options : { rows: 0, cols: 0 },
activeEffect : "none",
displayMe : function() {
// the 'this' pointer is referring to the std_obj
if (this.activeEffect=="fade") { }
var doSomeEffects = function() {
// the 'this' pointer is referring to the window obj, why?
if (this.activeEffect=="fade") { }
}
doSomeEffects();
}
};
std_obj.displayMe();
【问题讨论】:
-
你的问题到底是什么?
-
在函数内部使用时,
this指的是调用函数的对象。 -
你可以在外部范围内做的事情类似于
var self = this;,然后通过闭包在内部函数中引用self。 -
doSomeEffects不与任何特定的 obj 相关联,因此this被假定为窗口,是所有元素之母。 -
@JoJoeDad 我该如何委婉地说这个?但是下面chuckj给出的答案到目前为止是您问题的答案。要真正了解发生了什么,您应该阅读execution context、scope chain 和this keyword。从这里的一些答案的外观来看,其他人也应该阅读它们。我尝试宣传好的 javascript。这就是我花时间提供这些链接的原因。
标签: javascript function nested this