JavaScript服务:如何提供一个()方法,就像一个对象构造函数?

时间:2014-09-02 13:58:26

标签: javascript angularjs

我想创建一个将创建an interface to AngularJS's $http based on this.的服务我想使用依赖注入来注入服务,而无需重新编写单个函数调用并保持代码清洁。为此,我提供了一个公共服务,它为$ http对象创建一个变量,如下所示:

commonService = function(...) {
return {
    ...
    $http: $http
}

然后我在代码中到处使用common.$http。要将AngularJS $ http中的$ http更改为我的httpService,我只需要在一个地方更改它。 httpService看起来像这样:

function httpService($http, $q, pendingRequests, $interval) {
var get = function(url) {
    ...
    return requestPromise;
};

var service = {
    get:get
};

return service;

}

这适用于拨打$http.get()但是对$http({method:'get', url:'...'});的呼叫怎么办?

是否可以提供()方法,这实际上是httpService()()?否则它将调用AngularJs方法httpService()。

1 个答案:

答案 0 :(得分:2)

您只需返回一个函数而不是一个对象。您可以将属性添加到您的函数

function httpService($http, $q, pendingRequests, $interval) {
   var get = function(url) {
      ...
      return requestPromise;
   };

  // Instead of returning an object, return a function
  var service = function() {
    // do whatever you want here
  };

  service.get = get;

  // Add more properties to service as needed

  return service;
}