我有以下javascript对象,有点伪代码:
{
dateField: new Date(),
addMinutes:function(numMinutes)
{
CallWebService(numMinutes, function{alert(this.dateField; });
}
}
问题是CallWebService中的回调函数的范围没有看到对象的dateField属性。有没有办法可以访问它?谢谢!
答案 0 :(得分:8)
您需要保留this
函数的上下文(addMinutes
值)。
有几种方法可以实现它,最简单的方法是简单地在变量上存储this
的引用,该变量可用于回调函数的范围,例如:
var obj = {
dateField: new Date(),
addMinutes: function(numMinutes) {
var instance = this;
CallWebService(numMinutes, function () {
alert(instance.dateField);
});
}
};
答案 1 :(得分:0)
问题是回调很可能设置回调函数的范围,如果使用apply或call,则可以强制使用范围。你可以这样做:
{
dateField: new Date(),
addMinutes: function (numMinutes) {
var self = this;
var success = function () {
alert(this.dateField;);
};
CallWebService(numMinutes, function () { success.apply(self); });
}
}
答案 2 :(得分:0)
您可以使用点(。)运算符访问该对象范围内对象的任何属性(即变量或函数)。所以你可以像这样使用:
var obj = { dateField: new Date(), addMinutes: function(numMinutes) { callWebService(numMinutes, function() { alert(obj.dateField); }); } }
对象'obj'的'dateField'变量可以使用像'obj.dateField'这样的点运算符在该对象范围内访问。我认为这可以帮助您解决问题,如果您不清楚上面显示的代码,请告诉我。