0

重複の可能性:
JavaScript でシングルトンを実装する最も簡単でクリーンな方法は?

シングルトン オブジェクトを実装しようとするコード スニペストを次に示します。

Game.Score = (

    function () {
        ....
        var currentScorePolicy = {
            onBrickHitCorrectBasket: function () { alert("defaultScorePolicy::onBrickHitCorrectBasket called"); },
            onBrickHitWrongBasket: function () { },
            onBrickMissAllBaskets: function () { }
        };
        ...
        return {
             ....
             applyScorePolicyWithBonusEnabled: function (scorePerQuestion, maxBonusFactor) {
                currentScorePolicy = {
                    onBrickHitCorrectBasket: function () {
                       // alert("applyScorePolicyWithBonusEnabled::onBrickHitCorrectBasket called");
                        raise();
                        enlargeBonus();

                    },
                    onBrickHitWrongBasket: function () {
                        reduce();
                        resetBonus();
                    },
                    onBrickMissAllBaskets: function () { }
                };

               // alert("applyScorePolicyWithBonusEnabled called");
                that.currentScorePolicy.onBrickHitCorrectBasket();
            },

            applyScorePolicyWithBonusDisabled: function (scorePerQuestion) {
                currentScorePolicy = {
                    onBrickHitCorrectBasket: function () {
                        raise(scorePerQuestion); 
                    },
                    onBrickHitWrongBasket: function () {
                        reduce(scorePerQuestion);
                    },
                    onBrickMissAllBaskets: function () { }
                };
            },

            onBrickHitCorrectBasket: currentScorePolicy.onBrickHitCorrectBasket,
            onBrickHitWrongBasket: currentScorePolicy.onBrickHitWrongBasket,
            onBrickMissAllBaskets: currentScorePolicy.onBrickMissAllBaskets

        }

    })();

これは、ゲーム中にスコアリング ポリシーが変更される可能性がある場合の、私のゲームのスコア オブジェクトです。applyScorePolicyWithBonusEnabledScore オブジェクトはとの 2 つのメソッドを公開します。これらapplyScorePolicyWithBonusDisabledの目的は currentScorePolicy フィールドを変更することです。

ここで、アプリを起動するときに Score を初期化して を呼び出しますapplyScorePolicyWithBonusEnabled。後で、実行されることを期待して Score.onBrickHitCorrectBasket を呼び出しますScorePolicyWithBonus.onBrickHitCorrectBasketが、実際に実行されているのは、元のスタブcurrentScorePolicy.onBrickHitCorrectBasketが呼び出されることです。そこに仕掛けたアラートの呼び出しでわかります。

どうしたの?applyScorePolicyWithBonusEnabled()呼び出しで新しいオブジェクトが に割り当てられなかったのはなぜcurrentScorePolicyですか?

4

0 に答える 0