以下是我的代码 -
(function($){
obj = {
alertText: function(){
console.log('Called');
},
testFunc: function(){
console.log(this);
this.alertText();
},
checkFunc: function(){
inner();
function inner(){
console.log(this);
this.alertText();
}
}
}})(jQuery)
当我致电testFunc()
时,通过此关键字正确调用alertText()
。
然而,在我调用alertText()
函数后,inner()
{Type}中的checkFunc()
对testFunc()
的调用失败(TypeError表示this.alertText不是函数)。
当我如上所示控制这个时,我会在其中获得不同的内容 - obj
中的内容显示对象inner()
,而Window
内的内容{{1}} }显示{{1}}对象。
为什么会这样?为什么这个在两个地方有不同的含义?
答案 0 :(得分:1)
javascript中的this
关键字取决于调用上下文,并且具有多个语义。这是Javascript中最复杂,最离奇的功能之一。你可以阅读@ DarkCthulhu的link。
在javascript中有三种定义this
对象的方法,在此answer中也有解释:
在没有对象的情况下调用内部函数时,this
指向全局对象。而this
和checkFunc
的{{1}}是您分配给testFunc
的当前对象。
要解决您的问题,请在外部函数中创建obj
并在内部函数中使用var that = this
。这是Crockford的建议; - )