2017-01-24 159 views
0

起初,我有一个看起来像这样初始化自定义类

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

你得到这个错误,因为你没有初始化CustomDate类,你只有myDate变量为CustomDate类型。相反,你应该有CustomDate

var myDate: CustomDate = new CustomDate(); 

OR

实例化对象要减少你的努力在实例类,你可以将内部类中的所有常见的东西,但你只需要传递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

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

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

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