2017-01-06 29 views
0

我有這樣的類:打字稿:靜態方法的返回值

export class GlobalValidation { 
    static emailPattern(control: AbstractControl): ValidationResult { 
     var EMAIL_REGEXP = Pattern.EMAIL; 
     return this.checkPattern(control, EMAIL_REGEXP); 
    } 

    static urlPattern(control: AbstractControl): ValidationResult { 
     var URL_REGEXP = Pattern.URL; 
     return this.checkPattern(control, URL_REGEXP); 
    } 

    static checkPattern(control: AbstractControl, pattern: any) { 
     if (control.value != "" && !pattern.test(control.value)) { 
      return {"incorrectPatternFormat": true}; 
     } 

     return null; 
    } 
} 

EXCEPTION: Uncaught (in promise): Error: Error in :0:0 caused by: Cannot read property 'checkPattern' of undefined TypeError: Cannot read property 'checkPattern' of undefined at GlobalValidation.urlPattern

我在做什麼錯?

當我重寫類這樣的:

export class GlobalValidation { 

    static emailPattern(control: AbstractControl): ValidationResult { 

     var EMAIL_REGEXP = Pattern.EMAIL; 

     if (control.value != "" && !URL_REGEXP.test(control.value)) { 
      return {"incorrectPatternFormat": true}; 
     } 

     return null; 
    } 


    static urlPattern(control: AbstractControl): ValidationResult { 

     var URL_REGEXP = Pattern.URL; 

     if (control.value != "" && !URL_REGEXP.test(control.value)) { 
      return {"incorrectPatternFormat": true}; 
     } 

     return null; 
    } 
} 

一切都很好。

看起來很明顯,但我很想念它。

回答

2

您正在使用this調用checkPattern,儘管它是一種靜態方法。致電checkPattern使用GlobalValidation.checkPattern(...)

2

您不能從靜態方法訪問this。使用靜態類有一個目的,那就是 - 你不需要創建一個類的新實例來使用該方法。

您應該使用GlobalValidation.checkPatter(...)作爲菲爾帽建議或只是重寫它,所以它不使用GlobalValidation類的屬性。