为什么函数是从角度服务返回的

时间:2014-12-05 21:56:10

标签: angularjs

在定义角度服务时,需要传递一个Constructor函数。此构造函数将使用“new”关键字初始化,“new”返回的对象将设置为服务。到现在为止还挺好。

但是,我经常遇到程序员正在创建服务的实例,如下所示:

app.service('aObj', function AClass(){

  return function(a,b){
    alert(a + b);
  };

});

这将被称为

aObj(1,2)

虽然我不认为aObj现在最终会成为一个函数,但我无法理解为什么程序员会以这种方式初始化他们的服务。构造函数通常具有如下定义:

app.service('aObj', function AClass(){

  this.var1 = undefined;
  this.calculate = function(b){
    alert(this.var1 + b);
  };

});

然后最终会将其称为     aObj.var1 = 1;     aObj.calculate(2);

有人可以详细说明使用前一种方法定义服务的目的吗?

Plnkr: http://plnkr.co/edit/tpl:FrTqqTNoY8BEfHs9bB0f

1 个答案:

答案 0 :(得分:0)

这取决于您希望从服务中公开哪种API。

如果服务是用于公开几个密切相关的方法的容器,则返回一个对象并将其称为MyService.methodA()MyService.methodB()。 Angular的$location service就是一个例子。

如果服务仅公开单个公共方法,则服务用户可以更方便地将其称为MyService()而不是MyService.theOnlyMethod()。 Angular的$compile service就是一个例子。