是否可以通过重载构造函数来扩展Date

时间:2018-05-19 14:49:45

标签: angular typescript

我的数据包含以各种格式提供的日期,其中很多都不能被Typescript识别。我创建了一个" safeDateParse"提供扩展转换并重载Date.parse()方法的函数。

const lastUsedDate = new Date(Date.parse(lastUsed));

当我使用以下语法创建Date对象时,这是有效的。

let newDate = new Date(dateString);

我还想重载构造函数以使用以下语法。

function Date(dateAsString: string): Date {
        return safeDateParse(dateAsString);
}

到目前为止我的最大努力

.backgroundImage{

      background: url("img/background4.png") ;
    min-height: 100%;
    width: 100%;
    position: fixed;
    top:0;
    left: 0;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;

    }

这不起作用。它取代了Date类,而不是扩展它。我觉得应该有某种形式的"超级"或者"父母"在其中调用提供Date对象的其余部分。

是否可以覆盖构造函数,如果是,那么语法是什么?

3 个答案:

答案 0 :(得分:0)

我认为你可以用通常的方式覆盖Date构造函数:

window.Date = function (orig) {
  return function (...params) {
    // Do some custom stuff here
    return new orig(...params)
  }
}(Date)

答案 1 :(得分:0)

使用此代码作为起点:

Date.parse = function parse(dateAsString: string) {
    console.log('Overrided parse :)');
    return safeDateParse(dateAsString).valueOf();
};  

class MyDate extends Date {
    constructor(dateAsString: string) {
        console.log('extended Date');
        const d = Date.parse(dateAsString);
        super(d);
    }
}

window['Date'] = MyDate;

new Date();
// logs :
// extended Date
// Overrided parse :)

答案 2 :(得分:0)

为了记录,我从未成功重载构造函数。我发现该参数使用DateConstructor来处理各种过载。如果可能,我的解决方案必须处理这些重载。最后,我不情愿地选择了下面的解决方案,并且必须教育其他程序员使用我的Utility.safeDate()而不是新的Date()

public static safeDate(dateAsString: string): Date {
    return new Date(safeDateParse(dateAsString));
}

和示例电话。

const dateObject = Utility.safeDate('șapte mai 1983')