Typescript从类的构造函数调用方法

时间:2016-04-08 09:21:39

标签: javascript angularjs oop typescript angular-directive

我试图像这样调用类构造函数的方法:

' var paddleCtrl = scope.paddleRanged;

        paddleCtrl.slider = slider;
        this.$paddleLeft = paddleCtrl.$paddleLeft = $(elem).find('.paddle-left'),
            this.$paddleRight = paddleCtrl.$paddleRight =  $(elem).find('.paddle-right'),
            this.$paddleRailActive = paddleCtrl.$paddleRailActive = $(elem).find('.paddle-rail .active'),
            this.$clickZone = paddleCtrl.$clickZone =  $(elem).find('.clickZone');

        this.paramsInit();
}'

方法声明如下:
paramsInit() { console.log(this) }

但是得到这个错误:" this.paramsInit不是函数"。我试图声明一个方法:

paramsInit = () => {
        console.log(this)
 }

但是如果方法调用,那么这将引用Window对象

CodePen

上的示例

1 个答案:

答案 0 :(得分:0)

通过使用关键字“new”分配函数“link”来解决问题。

例如:

console.clear();
class TestController{
  constructor(){

  }
}
class TestLink {
  constructor(scope, elem, attr, ctrl){
    console.log('Method call:')
    this.method();
    console.log('Method2 call:')
    this.method2();
    console.log('Method3 call:')
    this.method3();
  }
  method = () => {
    console.log(this);
  }
  method2 = function() {
    console.log(this);
  }
  method3() {
    console.log(this);
  }

}
class TestDirective {
  restrict='E';
  replace=true;
  scope={};
  controller=TestController;
  controllerAs='Test';
  bindTocOntroller=true;
  link=(scope, elem, attr)=>{
    return new TestLink(scope, elem, attr);
  };
  template='<p>Hello</p>'
}

angular.module('App', [])
  .directive('test', ()=>new TestDirective);

codepen上的代码。