在TypeScript中初始化地图

时间:2016-08-18 09:27:03

标签: angular typescript

我必须了解这种奇怪的行为

代码

private map:Map<string,number>=new Map<string,number>();

callForFlower(cookie:string) : Observable<Map<string,number>>{
    try{
        this.url='https://flower.it/getFlower;
        return this.http.get(this.url)
            .map(this.extractFlower)
            .catch(this.handleError);
    }catch(err){
        this.errMsgSubj.next(err)
    }
}
extractFlower(){
    this.addRose();
}
addRose(){
    this.map.set("rose",0)
}

当我做map.set时我得到一个异常

  

this.map未定义

为什么呢?还有另一种在typescript中初始化Map对象的方法吗?

1 个答案:

答案 0 :(得分:2)

如果你想在传递的方法中使用this,比如

    .map(this.extractFlower)
    .catch(this.handleError);

你应该把它改成

    .map(this.extractFlower.bind(this))
    .catch(this.handleError.bind(this));

    .map((param) => this.extractFlower(param))
    .catch((param) => this.handleError(param));

但是这样你必须两次列出所有必需的参数,因此第一个建议通常是这个用例的首选建议。