-1

我对我正在处理的项目的常量值的快速枚举很感兴趣,但是如果您只想将几个不变的值存储在一个地方以便您可以重用,那么我在 StackOverflow 上找到的所有内容都过于复杂了他们。他们还使用对象,这意味着您可以更改它们的值,或者您必须了解并使用可能未在浏览器中实现的“冻结”关键字。

在这里明显使用闭包是个坏主意吗?也许我使用它们太多了,但似乎它们在任何地方都能派上用场。尤其是这里。

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 回答