2017-01-24 197 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 = ''; 
    } 
}