我无法控制或删除的脚本决定覆盖Date.prototype.setFullYear
方法的默认行为。这给我们的代码高度依赖的几个库(例如date-fns
)带来了问题。
是否有任何方法可以将Date.prototype.setFullYear
函数“重置”回其原始行为?修改原型的脚本最初是否可以工作都没关系-我不需要它,我只是不能轻易地删除它。
更新:
引起问题的脚本是Jira Core 7.13.3平台上捆绑的许多脚本之一,该平台可加载所有页面。它名为calendar-lib
,在平台上开发插件时会引起问题。
由于calendar-lib
是基本Jira安装的一部分,因此我们无法控制加载顺序;据我所知,有问题的脚本将始终首先加载。
类似于@Jonas的建议,结果表明本机方法存储在名为Date.prototype.__msh_oldSetFullYear
的变量中,可以用@Haseeb的答案重置全局行为。
更新17.06.19:
Jira开发人员团队现已确认此问题: https://jira.atlassian.com/browse/JRASERVER-69491
解决方案:
正如@Jonas和@Rob在评论中指出的那样,在我们的应用程序的起点上设置以下语句解决了该问题:
Date.prototype.setFullYear = Date.prototype.__msh_oldSetFullYear;
{幸运的是,Date.prototype.__msh_oldSetFullYear
是由有问题的calendar-lib
代码存储和公开的本机实现。
下面的评论中有很多非常好的建议,因此如果您处于类似的情况,请务必检查一下。
谢谢!
答案 0 :(得分:1)
这是您可以做的
选项1 -这将全局覆盖该功能。
let obj = new Date();
obj.__proto__.setFullYear = function(){
//your override code goes in here.
}
选项2 -这将仅在您的本地范围内覆盖该方法,或者仅在实例化的对象范围内覆盖该方法。
let obj = new Date();
obj.setFullYear = function(){
//your override code goes in here
}
希望这对您有用。
答案 1 :(得分:0)
正如@Jonas和@Rob在原始问题的注释中指出的那样,在我们的应用程序的起点设置以下语句解决了该问题:
Date.prototype.setFullYear = Date.prototype.__msh_oldSetFullYear;
Date.prototype.__msh_oldSetFullYear
是setFullYear
的本机实现,幸运的是,calendar-lib
代码通过有问题的ionic repair
存储并通过变量公开。
原始帖子下方的评论中还有其他非常好的建议-例如创建iFrame并从那里提取它-因此,如果您处于类似情况,请务必检查一下。