向JavaScript对象添加元数据

Add metadata to JavaScript objects

本文关键字:元数据 添加 对象 JavaScript      更新时间:2023-09-26

是否可以将元数据添加到JavaScript对象(包括字符串,数字和函数)?也就是说,

double = function(a){ return a*2; };
addMetadata(double,{desc:"Returns the double of a number."});
getMetadata(double).desc;

如何实现addMetadata和getMetadata ?

对于对象,包括函数,实现get/setMetadata的最好方法是根本不实现它。

double = function(a){ return a*2; };
double.desc = "Returns the double of a number."
alert(double.desc);

对于"原始"字符串/数字,您可以使用字典方法,如另一个答案所建议的:

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))

然而,我无法想象将元数据附加到字符串/数字字面量上会有什么用。

你可以这样做:

var metaDataStorer = {};
function addMetadata(object, meta) {
    metaDataStorer[object] = meta;
}
function getMetadata(object) {
    return metaDataStorer[object];
}