在打字稿类中使用“this”

时间:2013-11-21 13:35:57

标签: javascript typescript

我正在使用与dataContext相关的一些typescripts clases的重构。事情是昨天我花了很多时间来弄清楚为什么我没有从我的新datacontext获得一个breeze.promise。最后我得到了解决方案,它与“this”的范围有关。 不好用“this”的例子:

public getSomething(){
  return this.manager.executeQuery(query)
        .then(function (data) {               
          //THIS IS NOT WORKING" INSIDE OF THE FUNCTION
            this.log('this log will never be loged :(');
        }
}

现在相同的代码工作正常,但使用“that”作为临时变量:

public getSomething(){
  var that=this;
  return this.manager.executeQuery(query)
        .then(function (data) {               
            that.log('get something is complete');
        }
}

如果你看到第二段代码工作正常,但我必须为我班上的每个方法重复这个过程。现在我的问题是: 如何在班级创建“那个”变量?那可能吗?

我尝试使用下面的代码,但是我收到了一个编译错误:“无法找到符号'那个'。”

 export class eventDataContext extends dataContextBase.dataContextBase {
    public that;

    constructor() {        
      super();
      that = this;
    ...
    }
 }

任何想法如何将这个新变量“那个”放在班级?谢谢!

1 个答案:

答案 0 :(得分:3)

TypeScript有一个方便的快捷方式来解决这个问题,称为"胖箭头语法" =>

如果您使用以下内容,它应该适合您:

getSomething(){
  return this.manager.executeQuery(query)
        .then((data) => {               
            this.log('This *will* now be logged :)');
        });
}

快速免责声明 - 我不确定query的来源 - 它未被传递到getSomething方法。如果是类属性,请使用this.query