初始化自定义类

时间:2017-01-24 04:09:10

标签: javascript angular typescript

最初,我有一个看起来像这样的功能

import { CustomDate } from './../models/customDate';

export class DateService {

    datePickerResultToDate(date: Date) {

        var myDate: CustomDate;

        var month_str: string;

        switch (date.getMonth()) {
            case 0:
                month_str = 'Jan';
                break;
            case 1:
                month_str = 'Feb';
                break;
            // etc...
            default:
                month_str = 'Some Error';
        }

        myDate.day = date.getDate();
        myDate.month = date.getMonth();
        myDate.year = date.getFullYear();
        myDate.customDateString = date.getDate().toString() + ' ' + month_str + ' ' + date.getFullYear().toString();

        return myDate
    }

}

其中

export class CustomDate {
    day: number;
    month: number;
    year: number;
    customDateString: string;
}

执行后,我收到此错误

  

error_handler.js:54 EXCEPTION:./TimeSheetComponent类中的错误TimeSheetComponent - 内联模板:16:8导致:无法设置属性' day'未定义的

所以我认为我需要改为

    var myDate: CustomDate = {
        day: 0,
        month: 0,
        year: 0,
        customDateString: ''
    }

并修复了它。我的问题是,每次我想使用它时,初始化myDate ti值似乎很奇怪。有没有办法简化这个,以便当我想使用myDate时,它已经初始化并准备使用?或者我每次都必须这样做?

2 个答案:

答案 0 :(得分:2)

您收到该错误是因为您没有注册CustomDate课程,您只将myDate变量设为CustomDate类型。相反,你应该实例化CustomDate

的对象
var myDate: CustomDate = new CustomDate();

要在实例化类时减少您的工作量,您可以移动类中的所有常见内容,但您只需要将Date对象传递给CustomDate构造函数。

export class CustomDate {
    day;
    month;
    year;
    customDateString: Date;
    constructor(Date date) {
       this.day = date.getDate();
       this.month = date.getMonth();
       this.year = date.getFullYear();
       this.customDateString = date.getDate().toString() + ' ' + month_str + ' ' + date.getFullYear().toString();

    }
}

然后做类似下面的事情。

var myDate: CustomDate = new CustomDate(date);

答案 1 :(得分:1)

您可以简单地将构造函数添加到CustomDate类并初始化默认值。所以你在使用时不需要初始化它。你的班级可以是:

export class CustomDate {
  day: number;
  month: number;
  year: number;
  customDateString: string;

  constructor() {
    this.day = 0;
    this.month = 0;
    this.year = 0;
    this.customDateString = '';
  }
}