2

これは JavaScript のベスト プラクティスの質問です。グローバル オブジェクトの汚染を防ぎ、プライベート メソッドとパブリック メソッドを作成できるようにする、すぐに実行される関数があります。

私が立ち往生しているのは..プライベートメソッドの1つ(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();
        }
    }

}());
4

1 に答える 1

1

オブジェクトを関数外の変数に割り当てます。ネストされた関数は、外側の関数を含むクロージャを形成します。

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(..); 

    });
};
于 2013-09-17T09:38:15.173 に答える