向Javascript日期对象添加自定义字段/键
我所处的情况是,完成工作最干净、最简单的方法是用一个额外的字段扩充Javascript日期对象。这个额外的字段将存储一些关于特定日期来源的元数据,然后在呈现UI时由页面上的JS使用 我的问题是——这是一个好主意吗向Javascript日期对象添加自定义字段/键,javascript,monkeypatching,Javascript,Monkeypatching,我所处的情况是,完成工作最干净、最简单的方法是用一个额外的字段扩充Javascript日期对象。这个额外的字段将存储一些关于特定日期来源的元数据,然后在呈现UI时由页面上的JS使用 我的问题是——这是一个好主意吗 d = new Date(); d._my_ns_metadata = "some meta-data comes here"; 我试着阅读JS monkey补丁,但每个人似乎都在谈论更改/添加对象原型的函数定义。在这里,我只是向日期对象添加一个单独的字段/键。这种方法的问题是,只有
d = new Date();
d._my_ns_metadata = "some meta-data comes here";
我试着阅读JS monkey补丁,但每个人似乎都在谈论更改/添加对象原型的函数定义。在这里,我只是向日期对象添加一个单独的字段/键。这种方法的问题是,只有
Date
的实例才能获得元数据。任何其他实例都不会,除非您具有自动将其扩展到实例的其他函数。比如:
function dateWithMetaData(meta){
var aDate = newDate();
aDate._my_ns_metadata = meta;
return aDate;
}
var d = dateWithMetaData("some meta-data comes here");
但是,您会将该函数放置在何处,以便它可以在任何地方对日期的任何实例进行立即访问?当然,除了日期.原型
之外,还有其他地方。向对象的原型中添加某些内容可以使其所有实例都可用。因此,您可以这样做:
// Modifying the prototype
Date.prototype.setMetaData = function(meta){
this._my_ns_metadata = meta;
}
// Now any instance of Date has setMetaData
var d = new Date();
d.setMetaData("some meta-data comes here");
var x = new Date();
x.setMetaData("some meta-data comes here");
根据设计,JS允许修改本机对象。但是,不建议修改您不拥有的对象。你可能无意中破坏了东西。我不需要所有对象中的元数据。我计划将这段代码放在我的中央JSON解析器中,该解析器支持元数据,并将查看传入的JSON数据,并决定生成的日期对象是否需要元数据字段。