Javascript 我可以创建一个函数来替换调用它的对象吗?

Javascript 我可以创建一个函数来替换调用它的对象吗?,javascript,Javascript,当一些新的JSON出现时,我喜欢将所有字符串日期转换为日期对象。如果我能创建一个函数,用解析的日期对象替换调用它的字符串,我会更喜欢它。这可能吗 String.prototype.hydrateAsDate = ()=>{ this = new Date(this); // what I want to do, but how do I do it ?! } 您可以只使用一个实用程序,而不是更改原型: function parseDates(obj, ...keys)

当一些新的JSON出现时,我喜欢将所有字符串日期转换为日期对象。如果我能创建一个函数,用解析的日期对象替换调用它的字符串,我会更喜欢它。这可能吗

String.prototype.hydrateAsDate = ()=>{
    this = new Date(this);
    // what I want to do, but how do I do it ?!
}

您可以只使用一个实用程序,而不是更改原型:

 function parseDates(obj, ...keys) {
   const result = {...obj};
   for(const key of keys)
      result[key] = new Date(obj[key]);
   return result;
 }
其可用作:

parseDates({ createdAt: 123456789 }, "createdAt");
或替换一个:

obj = parseDates(obj, "createdAt");

您可以使用Resove from
JSON.parse
,它将返回
Date
对象,而不是结果中的字符串

功能恢复(键、值){
var a;
如果(值的类型==“字符串”){
a=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(值);
如果(a){
返回新日期(Date.UTC(+a[1]、+a[2]-1、+a[3]、+a[4]、+a[5]、+a[6]);
}
}
返回值;
}

console.log(JSON.parse(“2018-05-15T13:40:30.052Z\”,reserve)instanceof Date)不能更改其中父对象的引用。您需要遍历这些字段。只是因为这个实例可能有数百个引用。不,你不能这么做。您必须返回新对象。
箭头函数中的此
是外部上下文
!你可能不想用它。在控制台中运行
[1,2,3].map(()=>this)
将输出
[Window,Window,Window]
,而不是
[1,2,3]
。另外,不要忘记
JSON.parse()
允许您传递一个附加函数,该函数可以在将值添加到返回的对象之前对值进行变异。在这里问问题的成本非常高。我发现这一切都非常有趣和有用,即使其他人似乎都不喜欢它。那是什么神奇的
语法?@bb,是的。哦,我非常喜欢它。