在 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 年后的问题。您还可以制作一个日期子类来执行这些操作,并在需要时使用它。
我添加了这段代码:
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 年后的问题。您还可以制作一个日期子类来执行这些操作,并在需要时使用它。