我对我正在处理的项目的常量值的快速枚举感兴趣,但是我在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
};
答案 0 :(得分: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"));
})();
答案 1 :(得分:0)
不需要额外的全局变量:
var Colors = {
//insert basic stuff for Color3f objects here
BLACK: new Color3f(0, 0, 0),
//and so on
};