2017-10-13 83 views
0

我添加以下代碼:在JavaScript中擴展本地Date對象是否會導致意想不到的效果?

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對象的特定副作用。

+1

@Ivar我澄清了這個問題。基本上我正在尋找你所鏈接的問題沒有提供的細節。 – AngryHacker

回答

2

該功能應該正常工作。如果您正在操作屬性或覆蓋已存在的函數,則可能會出現問題。

例如,而不是this.getmonth() + 1你做了this.month++或任何內部被稱爲你剛剛改變日期和每次調用函數你正在改變日期。顯然,覆蓋一個函數會改變每個可能包含你的地方的函數。如果對於某些人來說,如果你在一個網頁上,並且你加載了5個腳本文件,他們將全部使用重寫的函數。這可能會有意想不到的結果。特別是如果腳本不相關。

所有這一切都說,它可能更好地構建作爲包裝 FormatDate (date) { return (date.getDate, ...)} 因爲這將防止未來的命名衝突等。想象一下,試圖從現在開始解決這個問題。你也可以創建一個日期子類來完成這些事情,如果你願意的話可以使用它。