0

假设我有这样的事情:

interface Scope extends ng.Scope {
   getMeSome(id:string):number[];
}
export class AwesomeController {
    constructor (public $scope:Scope) {
       $scope.getMeSome = id => this.getMeSome(id);
    }
    getMeSome(id:string){
      console.log('Alright... alright... here it is'); 
    }
}

现在你可以看到我在 3 个不同的地方有相同的方法签名。当然,我可以把它剪掉一点,然后在构造函数中执行它:

constructor (public $scope:Scope) {
   $scope.getMeSome = id => {
      console.log('Alright... alright... here it is'); 
   };
}

但这会像使用类固醇一样打击构造函数的身体(如果您有数十种不同的方法)。所以我想知道为什么我不能做这样的事情:

export class AwesomeController {
   constructor (public $scope:Scope) { }

   $scope.getMeSome(id:string) { // Can't extend $scope here, although I can do that in the constructor
      console.log('Alright... alright... here it is'); 
   }
}

为什么这不起作用?有什么让它更性感的建议吗?

4

1 回答 1

2

据我所知,在类中(与模块不同),您是在定义类,而不是在运行类,因此您不能在类的主体中进行任何分配(与方法主体相反)。所以这个语法不起作用:

export class AwesomeController {
    constructor (public $scope:Scope) {}
    $scope.getMeSome = id => {
      console.log('Alright... alright... here it is'); 
    }
}

你也只是定义了这个类的方法,而不是其他类的方法,所以你上面的语法也不起作用,因为它在你期望的地方与另一个类的方法混在一起定义你自己的:

export class AwesomeController {
    constructor (public $scope:Scope) {}
    $scope.getMeSome(id:string) => {
      console.log('Alright... alright... here it is'); 
    }
}

我认为你只需要按照你提出的前两种方式之一来做——这两种方式对我来说都很好。

于 2012-12-11T16:22:27.697 回答