我的代码:
export class WordService {
constructor(private http:Http, private storage:Storage){}
impulseData={
get():Promise<any>{
return this.storage.get('impulseData');
}
};
}
当我致电myWordService.impulseData.get()
时,我发现this.storage
是undefined
。那么我如何才能到达storage
中的impulseData.get
财产?
我猜这个问题是由this
的范围引起的。也许我应该让this
内外impulseData
共享相同的范围?
更新
感谢Suren Srapyan的回答,我终于将我的代码更改为:
impulseData={
get:()=>{
return this.storage.get('impulseData');
}
};
答案 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');
}
};