在typescript中的新类中创建方法

时间:2017-10-18 09:49:43

标签: javascript angular typescript

我有打字稿项目和更具体的Angular应用程序。

我有一个名为Test的类(你可以假设它是一个角度的组件)并且它可以访问http服务,这通常像this.http(' / endpoint')一样使用.subbebe(response = > {});

我需要在两者之间添加一些逻辑并将其分解为单独的方法(代码比我的示例稍微复杂一点)。

export class Test {

init() {
    this.http.get('/endpoint').map(this.transform);
}

transform(data) {
    // more logic here in isolated scope

    this.accessOutside(data); // I cannot access this method, isolated scope.
    // How to break down some logic into separate methods to access them
    // or how to create it new method within method?

    return data
}

accessOutside(data) {
    // more logic
}

}

当我调用this.http.get(' / endpoint')。map(this.transform)my" transform"方法是隔离的,无法访问Test类中的其他方法,但如何访问它或如何在transform方法中创建方法?

1 个答案:

答案 0 :(得分:1)

transform函数传递到map函数时,就像这样

this.http.get('/endpoint').map(this.transform);

您正在传递transform函数的副本,该函数没有this的概念。因此,当map函数调用transform函数的副本时,它的上下文将默认为window对象。因此,在transform方法的副本中,它将在accessOutside对象上查找名为window的函数。

解决此问题的最简单方法是使用lambda函数,如下所示:

this.http.get('/endpoint').map(data => this.transform(data));

由于arrow funcitons可以访问其定义的上下文范围,当map调用箭头函数时,this将引用您的Test实例和不是window