我遇到了一些事情,说明我显然还不明白。
谁能解释一下为什么“this”的值会在下面发生变化?
var MyFunc = function(){
alert(this);
var innerFunc = function(){
alert(this);
}
innerFunc();
};
new MyFunc();
我遇到了一些事情,说明我显然还不明白。
谁能解释一下为什么“this”的值会在下面发生变化?
var MyFunc = function(){
alert(this);
var innerFunc = function(){
alert(this);
}
innerFunc();
};
new MyFunc();
在 JavaScript 中,this
表示调用函数的上下文对象,而不是定义它的作用域(或调用它的作用域)。对于MyFunc
, this 引用正在创建的新对象;但是对于innerFunc
,它引用全局对象,因为innerFunc
调用时没有指定上下文。
这往往会使那些使用 Java 或类似 OO 语言的人绊倒,在这些语言中,this
几乎总是引用定义了被调用方法的类的实例。请记住:JavaScript 没有方法。或者上课。只是对象和功能。
只需执行以下操作:
var MyFunc = function(){
var self = this;
alert(self);
var innerFunc = function(){
alert(self);
}
innerFunc();
};
new MyFunc();
这样 self 总是意味着这个,不管你从哪里调用它,这通常是你想要的。
作为旁注,“this”不一定总是引用实际函数,因为您可以使用“强制”this-reference 调用函数,请考虑一个事件处理程序,其中 this 将引用实际元素触发了该事件。
使用
yourFunction.apply(thisReference, arguments)
您可以在“this”将指向您作为第一个参数传递的任何内容的地方调用它。
乍一看,我会说这是因为外部“this”引用了 MyFunc,而内部“this”引用了 innerFunc。
但是,Javascript 并不是我有任何特别专长的东西。