Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向Javascript日期对象添加自定义字段/键_Javascript_Monkeypatching - Fatal编程技术网

向Javascript日期对象添加自定义字段/键

向Javascript日期对象添加自定义字段/键,javascript,monkeypatching,Javascript,Monkeypatching,我所处的情况是,完成工作最干净、最简单的方法是用一个额外的字段扩充Javascript日期对象。这个额外的字段将存储一些关于特定日期来源的元数据,然后在呈现UI时由页面上的JS使用 我的问题是——这是一个好主意吗 d = new Date(); d._my_ns_metadata = "some meta-data comes here"; 我试着阅读JS monkey补丁,但每个人似乎都在谈论更改/添加对象原型的函数定义。在这里,我只是向日期对象添加一个单独的字段/键。这种方法的问题是,只有

我所处的情况是,完成工作最干净、最简单的方法是用一个额外的字段扩充Javascript日期对象。这个额外的字段将存储一些关于特定日期来源的元数据,然后在呈现UI时由页面上的JS使用

我的问题是——这是一个好主意吗

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数据,并决定生成的日期对象是否需要元数据字段。