我处于这样一种情况,即通过使用额外字段扩充Javascript Date对象,最简单,最简单的方法就是完成工作。额外字段将存储一些关于该特定日期的原点的元数据,然后在呈现UI时由页面JS使用。
我的问题是 - 以下是一个好主意:
d = new Date();
d._my_ns_metadata = "some meta-data comes here";
我试着阅读JS猴子补丁,但是每个人似乎都在谈论改变/添加函数定义到对象的Prototype。在这里,我只是将一个单独的字段/键添加到Date对象。
答案 0 :(得分:0)
您的方法存在的问题是只有Date
的实例才会获得该元数据。除非你有一些其他功能自动将其扩充到实例,否则任何其他实例都不会。类似的东西:
function dateWithMetaData(meta){
var aDate = newDate();
aDate._my_ns_metadata = meta;
return aDate;
}
var d = dateWithMetaData("some meta-data comes here");
但是,那么,您将在哪里放置该功能,以便可以在Date
的任何实例的任何位置立即访问该功能?除了Date.prototype
之外的其他地方。向对象的原型添加内容使其可用于它的所有实例。因此,您可以这样做:
// 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允许修改本机对象。但是,修改您不拥有的对象并不可取。你可能无意中破坏了东西。