1

以下是我的代码 -

(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()正确地调用了this关键字。

但是,在我调用函数后,alertText()使用this的调用在内部失败inner()(TypeError 说 this.alertText 不是函数)checkFunc()

当我如上所示控制时,我在其中得到不同的内容 - 里面的内容testFunc()显示对象obj,而里面inner()的内容显示Window对象。

为什么会这样?为什么在两个地方意味着不同?

4

1 回答 1

1

javascript中的this关键字依赖于调用上下文,并且具有多重语义。这是 Javascript 最复杂、最奇怪的特性之一。您可以阅读@DarkCthulhu 的链接

在 javascript 中有三种定义this对象的方法,正如这个答案中所解释的:

  1. someThing.someFunction(arg1, arg2, argN)
  2. someFunction.call(someThing, arg1, arg2, argN)
  3. someFunction.apply(someThing, [arg1, arg2, argN])

当您在没有对象的情况下调用内部函数时,this指向全局对象。而thisforcheckFunctestFunc是您分配给的当前对象obj

为了解决您的问题,在外部函数中,创建一个var that = thisthat在内部函数中使用。这是 Crockford 的建议 ;-)

于 2013-06-22T21:17:11.400 回答