When using a "for in" loop to set a method, the proper method names are set, but the variables used in each function call are clobbered by the last set property.
Example Code
function colorLog() {
var color = {
graph: '#88A825',
node: '#35203B',
link: '#911146',
error: '#AC2930',
info: 'black'
};
var logger = {};
for(var k in color) {
logger[k] = function(msg) {
console.log(color[k]);
console.log("%c" + msg, "color:" + color[k] + ";font-weight:bold;");
}
}
return logger;
}
var log = colorLog();
log.graph("Graph Says");
log.node("Node Says");
log.link("Link Says");
log.error("Error Says");
log.info("Info Says");
Output
black
Graph Says
black
Node Says
black
Link Says
black
Error Says
black
Info Says
What am I not understanding about scoping rules?