在Javascript中扩展本机Date对象会导致意外的影响吗?

时间:2017-10-13 17:15:29

标签: javascript resharper

我添加了这段代码:

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对象。

1 个答案:

答案 0 :(得分:2)

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

例如,代替this.getmonth() + 1您执行this.month++或内部调用,您刚刚更改了日期,每次调用函数时都会更改日期。显然,覆盖一个函数会改变每个包含你的函数的函数。如果对某些人来说,如果你在网页上并加载了5个脚本文件,他们都会使用被覆盖的功能。这可能会产生意想不到的结果。特别是如果脚本不相关的话。

所有这一切都说可能更好地将其构建为包装器 FormatDate (date) { return (date.getDate, ...)} 因为这会阻止未来的命名冲突等。想象一下,从现在开始尝试修复5年。您还可以创建一个执行这些操作的日期子类,并在需要时使用它。