簡體   English   中英

如何將覆蓋的原型方法“重置”回其原始行為

[英]How to “reset” an overridden Prototype method back to its original behaviour

我無法控制或刪除的腳本決定覆蓋Date.prototype.setFullYear方法的默認行為。 這給我們的代碼嚴重依賴的幾個庫(例如date-fns )帶來了問題。

有什么方法可以將Date.prototype.setFullYear函數“重置”回其原始行為? 修改原型的腳本最初是否可以工作都沒關系-我不需要它,我只是不能輕易地刪除它。

更新:

導致問題的腳本是在所有頁面上加載的Jira Core 7.13.3平台上捆綁的眾多腳本之一。 它名為calendar-lib ,在平台上開發插件時會引起問題。

由於calendar-lib是基本Jira安裝的一部分,因此我們無法控制加載順序;因為, 據我所知,有問題的腳本將始終首先加載。

就像@Jonas建議的那樣,事實證明本機方法存儲在名為Date.prototype.__msh_oldSetFullYear的變量中,可以使用該變量Date.prototype.__msh_oldSetFullYear的答案的全局行為。

更新17.06.19:

現在,Jira開發人員團隊已確認此問題: https : //jira.atlassian.com/browse/JRASERVER-69491

解:

正如@Jonas和@Rob在評論中指出的那樣,在應用程序的起點設置以下語句解決了該問題:

Date.prototype.setFullYear = Date.prototype.__msh_oldSetFullYear;

其中Date.prototype.__msh_oldSetFullYear是( Date.prototype.__msh_oldSetFullYear )由有問題的calendar-lib代碼存儲和公開的本機實現。

在下面的評論中有很多非常好的建議,因此如果您處於類似情況,請務必檢查一下。

謝謝!

這是你可以做的

選項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.__msh_oldSetFullYearsetFullYear的本機實現,幸運的是,該實現已通過有問題的calendar-lib代碼通過變量存儲和公開。

原始帖子下方的評論中還有其他非常好的建議-例如創建iFrame並從那里提取它-因此,如果您處於類似情況,請務必檢查一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM