AngularJS Factory中的enforce参数是什么意思

What is the meaning of enforce parameter in AngularJS Factory

我正在详细了解 angular 如何仅使用 module.factory() 方法实际创建工厂。

我发现在内部 angular 使用以下仅在内部使用提供程序的方法

function factory(name, factoryFn, enforce) 

所以我的问题是关于这个函数的第三个参数 enforce,它实际上做了什么。

创建 Angular 服务或工厂时,在幕后,Angular 最终对两者使用相同的函数:

function factory(name, factoryFn, enforce) {
  return provider(name, {
    $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn
  });
}

创建服务时,一般不会发送return值,在后台调用Object.create()创建包含sayHello方法的对象

app.service('MyService', function () {
  this.sayHello = function () {
    console.log('hello');
  };
});

但是,在创建工厂时,对象字面量是 returned:

app.factory('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

基本上,enforce 用于强制执行 return 值。这不仅仅是 "Is this a service or factory?" 的问题,因为如果您愿意,您仍然可以 return 来自服务的对象文字:

app.service('MyService', function () {
  return {
    sayHello: function () {
      console.log('hello');
    };
  }
});

关于问题:"Which should you use?" 看看这个:

http://blog.thoughtram.io/angular/2015/07/07/service-vs-factory-once-and-for-all.html