Javascript Highcharts-单击事件获取图表

Javascript Highcharts-单击事件获取图表,javascript,highcharts,Javascript,Highcharts,我需要在一个页面中创建9个具有相同选项的饼图,我正在使用以下函数创建它们: function newChart(series_id, div_name) { this.chart = { height: 450, marginBottom: 70 }, this.title = { floating: true }, this.subtitle = { floating: true }

我需要在一个页面中创建9个具有相同选项的饼图,我正在使用以下函数创建它们:

function newChart(series_id, div_name) {
    this.chart = {
        height: 450,
        marginBottom: 70
    },
    this.title = {
        floating: true
    },
    this.subtitle = {
        floating: true
    },
    this.legend = pie_legend,
            this.tooltip = tooltip_,
            this.plotOptions = {
                pie: {
                    showInLegend: true,
                    size: '100%',
                    borderWidth: 2,
                    borderColor: 'black',
                    point: {
                        events: {
                            mouseOut: function () {
                                setTranslation(this, false);
                            },
                            mouseOver: function () {
                                setTranslation(this, true);
                            },
                            click: function () {
                                var drilldown = this.drilldown;
                                if (isNumber(drilldown))
                                {
                                    chart3.series[0] = chart3.drilldown.series[drilldown];
                                    require(['jquery', 'charts'], function ($, charts) {
                                        $(function () {
                                            var tempScrollTop = $(window).scrollTop();
                                            charts.pie(div_name, chart3);
                                            $(window).scrollTop(tempScrollTop);
                                        });
                                    });
                                    chart3.colors = chart_colors;
                                }
                                else {
                                    chart3.series[0] = series_id.series[0];
                                    require(['jquery', 'charts'], function ($, charts) {
                                        $(function () {
                                            var tempScrollTop = $(window).scrollTop();
                                            charts.pie(div_name, chart3);
                                            $(window).scrollTop(tempScrollTop);
                                        });
                                    });
                                    chart3.colors = ["#FF7070", "#FFC870", "#B0DDC2", "#82CA9D", "#409661"];
                                }
                            }
                        }
                    },
                    dataLabels: {
                        enabled: false
                    }
                },
                series: {
                    dataLabels: {
                        style: {
                            fontWeight: 'bold',
                            fontSize: '16px'
                        }
                    }
                }
            },
    this.colors = ["#FF7070", "#FFC870", "#B0DDC2", "#82CA9D", "#409661"],
            this.series = [],
            this.drilldown = {
                series: []
            }
}
;
在单击事件中,我希望使用我正在创建的同一对象来创建函数。但是,我找不到一种方法使其动态化,如果我手动将chart3更改为chartX,它们将正确地单独创建并正常工作。我的问题是如何在单击函数中获取图表对象,我不能使用“this”,因为在该范围内,它正在检索图表中的一个点(本例中是饼图的一部分)。所以我想得到一些类似于:

    click: function () {
    var drilldown = this.drilldown;
    if (isNumber(drilldown))
    {
        thisChart.series[0] = thisChart.drilldown.series[drilldown];
        require(['jquery', 'charts'], function ($, charts) {
            $(function () {
                var tempScrollTop = $(window).scrollTop();
                charts.pie(div_name, thisChart);
                $(window).scrollTop(tempScrollTop);
            });
        });
        thisChart.colors = chart_colors;
    }
    else {
        thisChart.series[0] = series_id.series[0];
        require(['jquery', 'charts'], function ($, charts) {
            $(function () {
                var tempScrollTop = $(window).scrollTop();
                charts.pie(div_name, thisChart);
                $(window).scrollTop(tempScrollTop);
            });
        });
        thisChart.colors = ["#FF7070", "#FFC870", "#B0DDC2", "#82CA9D", "#409661"];
    }
}
我读过绑定函数可能会有帮助,但我不知道该怎么做,我还尝试将同一个对象作为函数的参数传递,但不起作用,并尝试将其作为字符串变量作为函数中的对象传递,但它不被视为对象,或者它会给我错误


我对Javascript完全陌生(比如3-4周的经验),所以请容忍我。我可以为每个图形创建一个独立的图表对象,重复代码9次,然后将chart3部分更改为chart1、chart2等,这样做是可行的,但我想让它更简单。

不知何故,提问可以帮助我找到答案,阅读关于括号符号的内容,我得出了以下结论:

click: function () {
    var drilldown = this.drilldown;
    var chartName = name;
    if (isNumber(drilldown))
    {
        window[chartName].series[0] = window[chartName].drilldown.series[drilldown];
        require(['jquery', 'charts'], function ($, charts) {
            $(function () {
                var tempScrollTop = $(window).scrollTop();
                charts.pie(div_name, window[chartName]);
                $(window).scrollTop(tempScrollTop);
            });
        });
        window[chartName].colors = chart_colors;
    }
    else {
        window[chartName].series[0] = series_id.series[0];
        require(['jquery', 'charts'], function ($, charts) {
            $(function () {
                var tempScrollTop = $(window).scrollTop();
                charts.pie(div_name, window[chartName]);
                $(window).scrollTop(tempScrollTop);
            });
        });
        window[chartName].colors = ["#FF7070", "#FFC870", "#B0DDC2", "#82CA9D", "#409661"];
    }
}
我在创建新图表时传递名称:

chart1 = new newChart(series1,"chart-pie1","chart1");
chart2 = new newChart(series2,"chart-pie2","chart2")
chart3 = new newChart(series3,"chart-pie3","chart3");

我希望它现在能正常工作。不管怎样,我很感激关于代码最小化的建议。我知道我的代码是非常重复的,我只是在学习javascript,所以我的代码不是非常有效或简单。

小建议:尝试使用函数将代码分隔开一点。没有任何硬性规定说“不要将代码缩进10次”,但这确实会让阅读变得更困难。