2016-09-09 87 views
1

我想創建一個新的Date派生類和重寫構造:覆蓋在日期子類的構造

export class MyDate extends Date { 
    constructor(str: string) { 
    super(str); 
    } 
} 

現在,如果我創建一個MyDate對象,這是行不通的:

var myDate = new MyDate("2016-10-20T12:30:00+0200"); 
console.log(myDate.toDateString()); // it crashes, myDate is incorrect 

我得到TypeError: Method Date.prototype.toDateString called on incompatible receiver [object Object]

如何覆蓋Date構造函數?可能嗎?

+0

您在'MyDate'聲明中缺少右括號。那是你的原始代碼嗎?您還需要確切地說明當您嘗試登錄時會發生什麼。 「它崩潰」是什麼意思? –

+0

你是對的,這個類是:
'類指明MyDate擴展日期{'
'構造函數(STR:字符串){' '超(STR);' '}' '}' 和錯誤是: 'TypeError:方法Date.prototype.toDateString在不兼容的receiver [object Object]上調用' – Factorial

回答

1

根據this question and the accepted answer,發生這種情況是因爲在ES5中不允許繼承Date。下面ES6代碼工作在Chrome,因爲Chrome瀏覽器原生支持ES6類(這是完全一樣的代碼,但我刪除類型註釋):

class MyDate extends Date { 
 
    constructor(str) { 
 
    super(str); 
 
    } 
 
} 
 

 
var myDate = new MyDate("2016-10-20T12:30:00+0200"); 
 
console.log(myDate.toDateString());

如果你只需要這個工作在本機支持ES6類的環境,請將TypeScript的--target編譯器選項更改爲'es6'。否則,你將需要做別的事情。

一種解決方法可能是將MyDate定義爲使其具有Date作爲成員變量。例如:

class MyDate { 

    private date:Date; 

    constructor(str: string) { 
    this.date = new Date(str); 
    } 

    toDateString(): string { 
    return this.date.toDateString(); 
    } 
}