2010-07-06 101 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」該對象範圍內的訪問。我想這會幫助你解決你的問題,讓我知道你是否不清楚上面顯示的代碼。