TypeScript'this'范围问题

时间:2017-02-11 08:33:46

标签: angular typescript this

我的代码:

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

当我致电myWordService.impulseData.get()时,我发现this.storageundefined。那么我如何才能到达storage中的impulseData.get财产?

我猜这个问题是由this的范围引起的。也许我应该让this内外impulseData共享相同的范围?

更新

感谢Suren Srapyan的回答,我终于将我的代码更改为:

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

2 个答案:

答案 0 :(得分:4)

this是指get()函数的上下文,它没有storage属性。

您可以使用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');
            }
        };
    }
}

如果您在构造函数中创建

,则只能使用storage.get('impulseData')

答案 1 :(得分:0)

在这种情况下,您可以使用不带this的构造函数参数。

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');
    }
  };