'this'关键字在两个地方有不同的含义?

时间:2013-06-22 21:00:49

标签: javascript

以下是我的代码 -

(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}}对象。

为什么会这样?为什么这个在两个地方有不同的含义?

1 个答案:

答案 0 :(得分:1)

javascript中的this关键字取决于调用上下文,并且具有多个语义。这是Javascript中最复杂,最离奇的功​​能之一。你可以阅读@ DarkCthulhu的link

在javascript中有三种定义this对象的方法,在此answer中也有解释:

  1. someThing.someFunction(arg1,arg2,argN)
  2. someFunction.call(someThing,arg1,arg2,argN)
  3. someFunction.apply(someThing,[arg1,arg2,argN])
  4. 在没有对象的情况下调用内部函数时,this指向全局对象。而thischeckFunc的{​​{1}}是您分配给testFunc的当前对象。

    要解决您的问题,请在外部函数中创建obj并在内部函数中使用var that = this。这是Crockford的建议; - )