網站搜尋

javascript - 如何擴展 Date 類別


我正在製作一個 Angular2 應用程式,而我從控制器取得的所有日期都是這種格式 "2017-02-2700:00:00"。我想擴充 JS 的 Date 物件,使我在建立新物件時可以從字串中移除 T,而且它仍然像日期物件一樣運作。我目前嘗試的方法並沒有成功。我製作的 IDate 物件是擴充自 Date 物件,但它顯示出來只是 null,而不是日期物件。有人知道發生了什麼事以及如何修正嗎?如果在 TypeScript 無法做到,我願意改用 ES6 JS。我看過關於擴充 Date 物件的文章,但那是修改原本的 Date 物件,我希望能有一個叫做 IDate 的物件,它跟 Date 一樣,只是多了幾個方法。如果這是唯一的方法,我會將那個答案標記為解答。

export class IDate extends Date {
    constructor() {
        super();
    }
    value; 
    toDate(value: string): Date {
        value.replace("T", " ");
        return new Date(value); 
    }
    getvalue() {
        return this.value;
    }
}

    let t = new IDate(); 
    let d = new Date();
    console.log(t);
    console.log(d);

主控台

 IDate {}
 Fri Mar 31 2017 11:53:59 GMT-0500 (Central Daylight Time)

答案#1

你只能在目標為 es6 時這樣擴展原生(內建)類型。
如果你不能以 es6 為目標,那你需要找到解決方法:擴展像 Error、Array 和 Map 這樣的內建類型可能不再可行。

更多相關資訊:

  • 我如何在 TypeScript 中擴展一個主機對象(例如 Error)
  • 無法擴展內建類型
  • TypeScript 中的自訂錯誤類別

雖然並非所有這些都在討論擴展 Date,但問題仍然完全相同。