上下文在$ .deferred.promise中混合

时间:2013-11-07 08:08:35

标签: javascript jquery jquery-deferred deferred

我有以下代码;

function myFunction(promiseObject){
     var that = this;

     promiseObject
        .done(function(){
                 //using that here
              });
}

上述函数在多个上下文中被调用,因此每个调用中this的值都会发生变化。我面临的问题是,对于许多并发调用,that的值会被另一个也在完成的上下文覆盖。

我想了解这可能是什么原因。还想了解that中定义的myFunction变量范围背后的概念是什么,但在附加的回调方法中使用。

提前致谢:)

-devsri

1 个答案:

答案 0 :(得分:4)

我希望我能正确理解你的问题。在that中定义并且在回调中可访问的myFunction变量背后的概念是工作中的词法范围。它正在创建一个闭包(基本上是对定义回调的函数的执行环境的引用),用于访问回调。

thismyFunction的价值将取决于您调用myFunction的方式。

如果您希望myFunction拥有特定的上下文,则需要使用该上下文调用它,如下所示:

var myContext = { foo: "bar" };
myFunction.call(myContext);

myFunction内this的值现在等于myContext

如果您希望that的值在呼叫之间保持一致,则需要确保在任何地方使用正确的上下文呼叫/应用myFunction

或者你可以使用像underscore.js的_.bind

这样的函数
myFunction = _.bind(myFunction, myContext);

myFunction现在将始终绑定到特定的上下文。