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

JavaScript服务:如何提供()方法,如对象构造函数?,javascript,angularjs,Javascript,Angularjs,我想创建一个服务来创建我想使用依赖注入来注入服务,而无需重新编写单个函数调用并保持代码干净。为此,我提供了一个公共服务,为$http对象创建一个变量,如下所示: commonService = function(...) { return { ... $http: $http } 然后我在代码中的任何地方都使用common.$http。要将$http从AngularJS$http更改为我的httpService,我只需要在一个地方进行更改。httpService如下所示: fu

我想创建一个服务来创建我想使用依赖注入来注入服务,而无需重新编写单个函数调用并保持代码干净。为此,我提供了一个公共服务,为$http对象创建一个变量,如下所示:

commonService = function(...) {
return {
    ...
    $http: $http
}
然后我在代码中的任何地方都使用
common.$http
。要将$http从AngularJS$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()。

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

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;
}

我想你正在寻找装饰师
()
不是一种方法。它只是调用一个返回的函数。如果这是您想要的,那么只需返回一个函数,该函数执行您需要的任何操作。@major mann这是如何工作的?比如
$provide.decorator((),$http)?这里有一个博客条目,应该可以让你继续:)基本上是$provide.decorator('$http',[“$delegate],function($delegate){}…在里面,$delegate是原始的$http。