javascript - 在 Javascript 中扩展 native Date 对象是否会导致意外效果?

标签 javascript resharper

我添加了这段代码:

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

Resharper 的代码检查工具告诉我,扩展 native 对象“Date”的原型(prototype)可能会导致意外的影响

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

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

最佳答案

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

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

尽管如此,将其构建为包装器可能会更好 FormatDate (日期) { return (date.getDate, ...)} 因为这可以防止 future 的命名冲突等。例如,想象一下 5 年后尝试解决这个问题。如果您愿意,您还可以创建一个执行这些操作的日期子类并使用它。

关于javascript - 在 Javascript 中扩展 native Date 对象是否会导致意外效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46734951/

相关文章:

javascript - Bokeh 和自定义 JS - 使用 slider 更新多线图

javascript - 使用按钮在 Jquery Datepicker 上设置日期

typescript - Angular 2 和 Visual Studio 2015 与 ReSharper 2016.1

c# - .NET Core 源的 ReSharper 导航仅显示 stub : how to move further to impl?

c# - Resharper 关于关闭的警告是否正确?

visual-studio - Resharper:Ctrl-Backspace键仅删除CamelCaseWord的一个子词

c# - FileHelper 无法处理其类中的 ReSharper 排序变量

javascript - 关于 Javascripts Prototype 的几个问题

javascript - jquery 显示/隐藏元素

javascript - 反转数组 - Eloquent javascript 第 4 章