2010-07-06 124 views
4

我有以下的JavaScript对象,有些伪代码:的Javascript嵌套函数范围

{ 
    dateField: new Date(), 
    addMinutes:function(numMinutes) 
    { 
    CallWebService(numMinutes, function{alert(this.dateField; }); 
    } 
} 

的问题是在CallWebService回调函数不看对象的DateField财产的范围。有什么方法可以访问它吗?谢谢!

回答

8

您需要保留addMinutes功能的上下文(this值)。

有几种方法来实现这一目标,最容易的是简单地存储this对变量的引用,这个变量将提供给回调函数的范围,如:

var obj = { 
    dateField: new Date(), 
    addMinutes: function(numMinutes) { 
    var instance = this; 
    CallWebService(numMinutes, function() { 
     alert(instance.dateField); 
    }); 
    } 
}; 
+0

正是我需要的。谢谢! – extnoob 2010-07-06 17:10:31

0

问题在于回调可能会设置回调函数的范围,如果使用apply或call可以强制范围。你可以像这样做:

{ 
    dateField: new Date(), 
    addMinutes: function (numMinutes) { 
     var self = this; 
     var success = function() { 
      alert(this.dateField;); 
     }; 
     CallWebService(numMinutes, function() { success.apply(self); }); 
    } 
} 
0

您可以通过使用点(。)运算符来访问该对象范围内对象的任何属性(即变量或函数)。所以,你可以使用这样的:

 
var obj = { 
    dateField: new Date(), 
    addMinutes: function(numMinutes) { 
    callWebService(numMinutes, function() { 
     alert(obj.dateField); 
    }); 
    } 
} 

这里的对象“的DateField”变量“OBJ”是使用点运算符,如“obj.dateField”该对象范围内的访问。我想这会帮助你解决你的问题,让我知道你是否不清楚上面显示的代码。