-1

私が取り組んでいるプロジェクトの定数値の非常に迅速な列挙に興味がありましたが、StackOverflowで見つけたものはすべて、再利用できるようにいくつかの不変の値を1つの場所に保存するだけの場合、途方もなく複雑になりすぎました。彼ら。また、オブジェクトを使用していたため、値を変更したり、ブラウザに実装されていない可能性のある「freeze」キーワードを理解して使用したりする必要がありました。

ここでのクロージャの明らかな使用は悪い考えですか?使いすぎかもしれませんが、どこでも重宝しているようです。特にここ。

var black = new Color3f(0, 0, 0);
var white = new Color3f(1, 1, 1);
var blue = new Color3f(0, 0, 1);

var Colors = {

    //insert basic stuff for Color3f objects here

    BLACK: function(){
        return black;
    },

    //and so on
};
4

2 に答える 2

1

オブジェクトは変数スコープを作成しないため、JavaScriptでクロージャを作成することはできません。

クロージャを使用するには、次のようにします。

var color = (function() {

    var color_map = {
        black: new Color3f(0, 0, 0),
        white: new Color3f(1, 1, 1),
        blue: new Color3f(0, 0, 1)
    };

    return function(c) { return color_map[c.toLowerCase()]; };
})();

次に、関数を呼び出してcolor色をフェッチします。

color("black");

外側の関数はすぐに呼び出され、内側の関数はcolor変数に割り当てられる関数であることに注意してください。

また、あらゆる種類の変更を防ぐために、すべてのコードを別の関数でラップすることもできます。

(function() {
    var color = (function() {
        var color_map = {
            black: new Color3f(0, 0, 0),
            white: new Color3f(1, 1, 1),
            blue: new Color3f(0, 0, 1)
        };

        return function(c) { return color_map[c.toLowerCase()]; };
    })();

    // the rest of your code
    alert(color("black"));
})();
于 2012-09-21T18:15:51.357 に答える
0

追加のグローバル変数は必要ありません。

var Colors = {

    //insert basic stuff for Color3f objects here

    BLACK: new Color3f(0, 0, 0),

    //and so on
};
于 2012-09-21T17:52:06.867 に答える