For objects, including functions, the best way to implement get/setMetadata is not to implement it at all.
double = function(a){ return a*2; };
double.desc = "Returns the double of a number."
alert(double.desc);
For "primitive" strings/numbers you can use a dictionary approach like suggested in another answer:
metaStorage = {}
setMetaData = function(obj, data) {
if(typeof obj == "object")
obj._metaData = data;
else
metaStorage[obj] = data;
}
getMetaData = function(obj) {
if(typeof obj == "object")
return obj._metaData;
else
return metaStorage[obj];
}
setMetaData(1, "this is one");
console.log(getMetaData(1))
setMetaData(window, "my window");
console.log(getMetaData(window))
However, I can't imagine how it could be useful to attach metadata to string/number literals.