Javascript:对象在使用原型(prototype)时没有方法

标签 javascript function-prototypes

为什么我必须调用 new Chart() 来触发来自同一个类的方法(比如)?这是正确的方法吗?谢谢。

  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.



            });      
    }); 
}

最佳答案

这是一个简单的范围界定问题。 this 指向您传递给 $.each 的函数。您必须将旧的 this 引用存储在另一个变量中:

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);
            });      
    }); 
}

关于Javascript:对象在使用原型(prototype)时没有方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685997/

相关文章:

javascript - 向 Node.js 上的 azure 函数添加中间件函数

javascript - 如何在共享服务器上安全地存储用户名和密码?

c++ - C++ 中缺少前向声明的问题

Javascript 可调用和原型(prototype)可扩展函数

javascript - 通过使用 jQuery 重新排序元素来模拟 CSS Column 垂直内容流?

javascript - Waypoints 中的 jQuery 每个循环

c - 为什么空声明适用于具有 int 参数的定义但不适用于 float 参数?

python - 如何在 Python 中转发声明/原型(prototype)化函数?

c++ - C++ 11中auto关键字中的编译错误

javascript - Django:更改 javascript 函数内的字体颜色