2011-07-13 20 views
1

爲什麼我必須調用新的Chart()來從同一個類(每個說法)中引發一個方法?這是做到這一點的正確方法嗎?謝謝。Javascript:使用原型時對象沒有方法

function Chart(location, startDateString, endDateString) { 

    this.location = location; 
    this.startDateString = startDateString; 
    this.endDateString = endDateString; 
} 


Chart.prototype.fnDrawStaticChart = function(chartUrl, chartData) { 

    $.get(chartUrl, function() {      
     $('#'+chartData.wrapSpecId).attr('src', chartUrl);        
    });  
} 

Chart.prototype.fnDraw = function(fnStaticChartJSON, fnStaticChartImage) {   

    $.getJSON(fnStaticChartJSON, function(data) { 

     if (data.chartData.length > 0) {  

      $('#chartDiv').append($('#template').jqote(data, '@'));  

      $.each(data.chartData, function(index, chartData) { 

       var pkgLineId = chartData.wrapSpec2.pkgLineId.pkgLineId;    
       var wrapSpecId = chartData.wrapSpecId; 
       var startDate = data.startDate; 
       var endDate = data.endDate; 

       var chartUrl = fnStaticChartImage({ 
        pkg_line_id: pkgLineId, 
        wrap_spec_id: wrapSpecId, 
        start_date: startDate, 
        end_date: endDate 
       }); 

       this.fnDrawStaticChart(chartUrl, chartData); //can't do this. 
       new Chart().fnDrawStaticChart(chartUrl, chartData); CAN do this. 



      });  
    }); 
} 

回答

2

這是一個簡單的範圍界定問題。 這個指向您傳遞給$ .each的函數。您必須將舊的參考值存儲在另一個變量中:

Chart.prototype.fnDraw = function(fnStaticChartJSON, fnStaticChartImage) {   
    var self = this; 
    $.getJSON(fnStaticChartJSON, function(data) { 

     if (data.chartData.length > 0) {  

      $('#chartDiv').append($('#template').jqote(data, '@'));  

      $.each(data.chartData, function(index, chartData) { 

       var pkgLineId = chartData.wrapSpec2.pkgLineId.pkgLineId;    
       var wrapSpecId = chartData.wrapSpecId; 
       var startDate = data.startDate; 
       var endDate = data.endDate; 

       var chartUrl = fnStaticChartImage({ 
        pkg_line_id: pkgLineId, 
        wrap_spec_id: wrapSpecId, 
        start_date: startDate, 
        end_date: endDate 
       }); 

       self.fnDrawStaticChart(chartUrl, chartData); 
       new Chart().fnDrawStaticChart(chartUrl, chartData); 
      });  
    }); 
} 
+0

好的很酷。那麼爲什麼我不能像this.fnDrawStaticChart()那樣調用它呢? 「this」引用$ .getJSON中的某些內容嗎? –

+0

不,* this *總是指您正在使用的函數的當前範圍,在您的情況下是您傳遞給$ .each()的函數(index,chartData)。 – Daff