在 Javascript 中扩展本机 Date 对象是否会导致意外效果?

Does extending native Date object in Javascript cause unexpected effects?

我添加了这段代码:

Date.prototype.formatMMDDYYYY = function () {
  return (this.getMonth() + 1) +
    "/" + this.getDate() +
    "/" + this.getFullYear();
}

Resharper 的代码检查工具告诉我 Extending prototype of native object 'Date' may cause unexpected effects.

可能会发生哪些意想不到的影响?

P.S。 question 讨论了为什么扩展对象通常不是一个好主意,但所有答案都非常模糊。我正在寻找以我所做的方式扩展 Date 对象的特定副作用。

该功能应该可以正常工作。如果您正在操作属性或覆盖已经存在的函数,您可能会遇到问题。

例如,您没有使用 this.getmonth() + 1,而是使用了 this.month++ 或调用了任何内部函数,您只是更改了日期,每次调用该函数时,您都在更改日期。显然,重写一个函数会在每个包含你的地方改变这个函数。如果对于某些人来说,如果您在网页上并加载 5 个脚本文件,它们都会使用重写函数。这可能会产生意想不到的结果。特别是如果脚本不相关。

综上所述,最好将其构建为包装器 FormatDate (date) { return (date.getDate, ...)} 因为这可以防止将来发生命名冲突等。例如,想象一下从现在起尝试解决 5 年后的问题。您还可以制作一个日期子类来执行这些操作,并在需要时使用它。