如何覆盖Date.prototype.toJSON并在实现中使用原型的功能?


var a = new Date;
console.log(a.toJSON());

我想修改 Date.prototype.toJSON 以将 a 的值增加 xxx 分钟,然后在执行它所做的事情之后。 我写了这段代码,但以递归方式运行:

var Date_toJSON = Date.prototype.toJSON;
Date.prototype.toJSON = function() {
return Date_toJSON.call(new Date(this.getTime() + (60 * 1000)));
}

我想这样做是因为JSON.strignify不计算时区差异。因此,必须修改 Date.prototype.toJSON 以通过以下方式更改 (this) 值:(this.getTimezoneOffset() * 60 * 1000)(1 小时)例如。

有人可以告诉我正确的方法吗?

覆盖原型函数是一种不好的做法 相反,您可以使用像 luxon 或 date-fns 这样的库

https://moment.github.io/luxon/https://date-fns.org/

您可以简单地创建自己的CustomDate类来扩展现有类。

在其中你可以覆盖toJSON(),如果你仍然需要访问Date.prototype.toJSON()你可以在super上显式调用它。

该示例展示了如何操作toJSON()的返回值,并且由于时区相关问题,显式是否不尝试实现所需的逻辑,因为这不是您问题的重点

class CustomDate extends Date {
toJSON() {
return super.toJSON.call(new Date(this.getTime() + 60 * 1000))
};
}
const a = new CustomDate;
console.log(a.toJSON());

最新更新