打字稿 - 词法范围的问题=>这个

时间:2015-08-07 15:11:40

标签: javascript angularjs typescript this

我的问题在于以下功能:

() => this.handleRes(res, this.lobbyInitFn(this.$log, this.lobbyData))

在Ctrl上引用lobbyData变量的最佳方法是什么? 作为胖箭头语法的结果,我得到一个指向全局window对象的指针。

目前,我只是在$log方法中引用lobbyInitFn函数,而在dataCol参数中引用了未定义。

module lobby.controllers {
  'use strict';

  class LobbyCtrl{
    public lobbyData : Array<string>;

    constructor(private $scope, private $log : ng.ILogService, private lobbyStorage) {
      this.init();
    }

     private init(){
      this.initializeLobbyData();
    }

    private initializeLobbyData(){
      var res = this.lobbyStorage.LobbyRoom().query(
        () => this.handleRes(res, this.lobbyInitFn(this.$log, this.lobbyData)),
        () => this.handleErr("Error while initializing the lobby data."));
    }

     private lobbyInitFn(logger, dataCol){
      return function(data){
        for (var i = 0; i < data.length; ++i) {
          logger.log(data[i]);
        }
        dataCol = data;
      }
    }

    // Common functions => outsourcing
    private handleRes(res : any, resFn? : callbackFn) {
      if(typeof resFn != 'undefined') {
        resFn(res)
      } else{
        this.$log.log(res);
      }
    }

    private handleErr(err : string, errFn? : callbackFn) {
      if(typeof errFn != 'undefined') {
        errFn(err)
      } else{
        this.$log.error(err);
      }
    }
  }

1 个答案:

答案 0 :(得分:0)

你可以尝试:

() => this.handleRes(res, () => this.lobbyInitFn(this.$log, this.lobbyData))