【发布时间】:2014-08-04 13:10:37
【问题描述】:
我对 JS 中的 this 关键字感到困惑,如下所示。为什么 this.this_ 在第 3 行中未定义)?有什么简单的说明吗?在第 2 行)this 指向 Window 对象 - 我很惊讶,但我可以接受 - 为什么会这样?唯一对我有用的是使用this2_ 变量,但我认为这并不优雅。如何以良好、优雅的方式使用this 始终工作并指向O 对象?
var a = function(callback){
callback('test');
};
var O = function(){
this.val = 'abc';
var this2_ = this;
this.this_ = this;
this.f = function(){
console.log(this); // (1) this -> O object, that's OK
a(function(){
console.log(this); // (2) this -> Window object
console.log(this.this_); // (3) this.this_ -> undefined
console.log(this2_); // (4) this2_ -> O object
});
}
};
var o = new O();
o.f();
【问题讨论】:
-
您为什么要这样做?为什么因为
this在该函数中不是this。你的 cmets 表明了这一点。 -
var this2_ = this;是这样做的方法。原因是另一个函数中的范围发生了变化,this变得不同了。使用var this2_ = this,您将其放入内部函数范围内的本地变量中。 -
这里是对“this”的解释:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/….
标签: javascript oop javascript-objects