2017-02-11 93 views
1

我的代碼:打字稿 '這個' 範圍界定問題

export class WordService { 
    constructor(private http:Http, private storage:Storage){} 
    impulseData={ 
     get():Promise<any>{ 
      return this.storage.get('impulseData'); 
     } 
    }; 
} 

當我打電話myWordService.impulseData.get(),我發現this.storageundefined。那麼我怎樣才能到達impulseData.getstorage

我想這個問題是由this的範圍界定引起的。也許我應該讓this內外impulseData共享相同的範圍?

更新:

由於蘇倫Srapyan的答案,我終於改變我的代碼如下:

impulseData={ 
    get:()=>{ 
     return this.storage.get('impulseData'); 
    } 
}; 

回答

4

this是指不具有storage財產get()功能的上下文。

您可以使用arrow functions

export class WordService { 
    constructor(private http:Http, private storage:Storage){} 
    impulseData = { 
     get:(): Promise<any> => { 
      return this.storage.get('impulseData'); 
     } 
    }; 
} 

或試圖獲得this以外,並創建在構造函數的對象。同樣在這種情況下,您需要將您的對象附加到this,因爲現在它的作用域在構造函數中,並且在其外部不可見,如果它未連接到this

export class WordService { 
    impulseData; 

    constructor(private http: Http, private storage: Storage) { 
     const context = this; 
     this.impulseData = { 
      get(): Promise<any> { 
       return context.storage.get('impulseData'); 
      } 
     }; 
    } 
} 

或者,如果你在構造函數中

+0

箭職能的工作!謝謝。 – awmleer

0

在這種情況下,你可以使用構造函數參數不this創建只能使用storage.get('impulseData')

constructor(private http:Http, private storage:Storage){ 
    impulseData = { 
    get():Promise<any>{ 
     return storage.get('impulseData'); 
    } 
    }; 

否則,你應該使用局部變量

constructor(private http:Http, private storage:Storage){ 
    let self = this; 
    impulseData={ 
    get():Promise<any>{ 
     return self.storage.get('impulseData'); 
    } 
    };