Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何";重置";重写的原型方法返回其原始行为_Javascript_Date_Prototype_Jira - Fatal编程技术网

Javascript 如何";重置";重写的原型方法返回其原始行为

Javascript 如何";重置";重写的原型方法返回其原始行为,javascript,date,prototype,jira,Javascript,Date,Prototype,Jira,我无法控制或删除的脚本决定重写Date.prototype.setFullYear方法的默认行为。这会导致代码严重依赖的几个库出现问题,例如date fns 是否有办法将Date.prototype.setFullYear功能“重置”回其原始行为?不管修改原型的脚本在之后是否工作,我不需要它工作,我只是无法轻松删除它 更新: 导致问题的脚本是Jira Core 7.13.3平台上捆绑的众多脚本之一,可加载到所有页面。它名为日历库,在平台上开发插件时会出现问题 由于日历库是基本Jira安装的一部分

我无法控制或删除的脚本决定重写
Date.prototype.setFullYear
方法的默认行为。这会导致代码严重依赖的几个库出现问题,例如
date fns

是否有办法将
Date.prototype.setFullYear
功能“重置”回其原始行为?不管修改原型的脚本在之后是否工作,我不需要它工作,我只是无法轻松删除它

更新:

导致问题的脚本是Jira Core 7.13.3平台上捆绑的众多脚本之一,可加载到所有页面。它名为
日历库
,在平台上开发插件时会出现问题

由于
日历库
是基本Jira安装的一部分,我们无法控制加载顺序;据我所知,有问题的脚本总是先加载

正如@Jonas所建议的,本机方法存储在一个名为
Date.prototype.\uuu msh\u oldSetFullYear
的变量中,该变量可能可以使用@Haseeb的答案重置全局行为

更新17.06.19:

Jira开发团队现已确认该问题:

解决方案:


正如@Jonas和@Rob在评论中指出的,在我们的应用程序的起点上设置以下语句解决了问题:

Date.prototype.setFullYear = Date.prototype.__msh_oldSetFullYear;
Date.prototype.setFullYear=Date.prototype.\uu msh\u oldSetFullYear

其中,
Date.prototype.\uuu msh\u oldSetFullYear
是本机实现(幸运的是)由有问题的
日历库
存储和公开

下面的评论中有很多非常好的建议,所以如果你遇到类似的情况,一定要查看这些建议


谢谢

以下是您可以做的

选项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
  }

希望这对您有用。

正如@Jonas和@Rob在原始问题的评论中指出的,在我们的应用程序的起点上设置以下语句解决了问题:

Date.prototype.setFullYear = Date.prototype.__msh_oldSetFullYear;
其中,
Date.prototype.\uuu msh\u oldSetFullYear
setFullYear
的本机实现,幸运的是,它通过变量存储并由有问题的
calendar lib
代码公开


在原始帖子下面的评论中也有其他非常好的建议,比如创建一个iFrame并从中提取它,所以如果你遇到类似的情况,一定要查看这些建议。

不,如果它丢失一次,就不能重新构建。覆盖它的部分必须保留对原始方法的引用,可能它也会公开它?在加载有问题的脚本之前,您可以运行自己的脚本吗?您可以从另一个领域(通常是iframe)带回内置方法,但实际上,您应该首先防止该脚本与它们发生冲突。如果Jira正在破坏内置程序,请对其进行错误报告。您是否可以控制何时加载/导入有问题的脚本?关于这一内容的一些上下文可能会引发一些想法。如果您最后的陈述是正确的,您可以简单地执行
Date.prototype.setFullYear=Date.prototype.\uu msh\u oldSetFullYear
。这可能会对使用calendar-lib的任何内容产生副作用。请参阅关于
\uuuuu proto\uuuuu
的使用,强烈建议不要使用。访问对象的
[[Prototype]]
有(最近的)符合标准的方法。虽然这不是一个任何人都想使用的解决方案,但这可能需要重置函数行为。不过,唯一的缺点是必须手动复制原始功能。谢谢你的提示,我将结合上面的注释尝试一下。@TormodHaugene如果你想“重置”这个方法,你可以使用Date.prototype,而不是使用日期实例的非标准属性。请注意,这可能会对使用日历库的任何内容产生副作用。