将自定义字段/键添加到Javascript Date对象

时间:2013-12-28 02:25:44

标签: javascript monkeypatching

我处于这样一种情况,即通过使用额外字段扩充Javascript Date对象,最简单,最简单的方法就是完成工作。额外字段将存储一些关于该特定日期的原点的元数据,然后在呈现UI时由页面JS使用。

我的问题是 - 以下是一个好主意:

d = new Date();
d._my_ns_metadata = "some meta-data comes here";

我试着阅读JS猴子补丁,但是每个人似乎都在谈论改变/添加函数定义到对象的Prototype。在这里,我只是将一个单独的字段/键添加到Date对象。

1 个答案:

答案 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允许修改本机对象。但是,修改您不拥有的对象并不可取。你可能无意中破坏了东西。