我对JS中的this
关键字感到困惑,如下所示。为什么在第3行中未定义this.this_
?任何简单的exalain为此?在第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();
答案 0 :(得分:3)
不建议"管理" this
,因为它会在不同的范围内发生变化。在这种情况下,当您尝试在新函数中获取值时,您处于新范围内,this
引用窗口对象。
您应该使用新变量并尝试不将内容附加到this
。只是出于只读原因使用它
注意:这不是不可能的(例如jQuery对this
进行了非常好的管理),但不建议这样做。
所以在你的情况下,你可以这样做:
var O = function(){
var this2;
this2.this_ = this;
this2.val = 'abc';
this.f = function(){
a(function(){
console.log(this2.val); // (1) 'abc'
console.log(this2.this_); // (2) O object
});
}
};