5

我遇到了一些事情,说明我显然还不明白。

谁能解释一下为什么“this”的值会在下面发生变化?

var MyFunc = function(){
    alert(this);
    var innerFunc = function(){
        alert(this);
    }
    innerFunc();
};

new MyFunc();
4

4 回答 4

18

在 JavaScript 中,this表示调用函数的上下文对象,而不是定义它的作用域(或调用它的作用域)。对于MyFunc, this 引用正在创建的新对象;但是对于innerFunc,它引用全局对象,因为innerFunc调用时没有指定上下文。

这往往会使那些使用 Java 或类似 OO 语言的人绊倒,在这些语言中,this几乎总是引用定义了被调用方法的类的实例。请记住:JavaScript 没有方法。或者上课。只是对象和功能。

另请参阅:JavaScript 中“this”关键字行为的基本原理是什么?

于 2009-03-16T22:27:42.703 回答
2

只需执行以下操作:

var MyFunc = function(){
    var self = this;
    alert(self);
    var innerFunc = function(){
        alert(self);
    }
    innerFunc();
};

new MyFunc();

这样 self 总是意味着这个,不管你从哪里调用它,这通常是你想要的。

于 2009-03-17T09:27:57.360 回答
1

作为旁注,“this”不一定总是引用实际函数,因为您可以使用“强制”this-reference 调用函数,请考虑一个事件处理程序,其中 this 将引用实际元素触发了该事件。

使用

yourFunction.apply(thisReference, arguments)

您可以在“this”将指向您作为第一个参数传递的任何内容的地方调用它。

于 2009-03-16T22:39:55.077 回答
-1

乍一看,我会说这是因为外部“this”引用了 MyFunc,而内部“this”引用了 innerFunc。

但是,Javascript 并不是我有任何特别专长的东西。

于 2009-03-16T22:25:14.097 回答