Javascript嵌套函数范围

时间:2010-07-06 16:18:20

标签: javascript

我有以下javascript对象,有点伪代码:

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

问题是CallWebService中的回调函数的范围没有看到对象的dateField属性。有没有办法可以访问它?谢谢!

3 个答案:

答案 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'这样的点运算符在该对象范围内访问。我认为这可以帮助您解决问题,如果您不清楚上面显示的代码,请告诉我。