从回调函数中调用对象的私有方法

3
这是一个关于javascript最佳实践的问题。我有一个立即执行的函数,它防止我污染全局对象,并让我创建私有和公共方法。
我遇到的困难是,在其中一个私有方法(如下面的drawChart)中,如何处理具有回调的情况,该回调将this更改为其他内容,但仍能够调用模块中的另一个私有方法... 下面的示例显示了我的意思 - 我该如何确保addChartSummay始终使用正确的this来执行?
var SentDetails = (function () {
    var chart;

    var addChartSummary = function () {

        // In here, I need to access "chart"
        chart.something = something;

    };

    var drawChart = function() {
        chart = new Highcharts.Chart({
            ...
        }, function(chart) {
            // Because this is in a oncomplete call-back, "this" is now set to window (global)
            addChartSummary(); // Will enter method but "this" is wrong so will not work
            SentDetails.addChartSummary.call(..); // Won't work because addChartSummary is private..


        });
    };

    return {
        loadChart: function() {
            ... do some work
            drawChart();
        }
    }

}());
1个回答

3

将对象分配给函数外的变量。嵌套函数将形成一个包含外部函数的闭包。

var that = this;

var addChartSummary = function () {

    // In here, I need to access "chart"
    that.chart.something = something;

};

var drawChart = function() {
    chart = new Highcharts.Chart({
        ...
    }, function(chart) {
        that.addChartSummary.call(..); 

    });
};

这是一个相当简单的解决方案,我喜欢它 :) - Matt Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接