AngularJS设计模式:我应该使用工厂来创建构造函数吗?

bra*_*kim 14 javascript design-patterns angularjs

这是我在创建AngularJS应用程序时一直在考虑的事情.当我第一次了解AngularJS工厂时,我认为它们的一个巧妙用法是创建并返回构造函数而不是普通对象,即:

app.factory("Foo", function() {
  function Foo(bar, baz) {
    this.bar = bar;
    this.baz = baz;
    ...
  }

  Foo.prototype = {
    constructor: Foo,
    method1: function() { ... },
    method2: function() { ... },
    ...,
    methodn: function() { ... },
  };

  return Foo;
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以将该功能注入您的控制器并调用它new.我发现这美观和OOP-y,但现在我开始认为它实际上是一种反模式.问题是当它在AngularJS感知上下文中工作时它可以正常工作,但是一旦你想要从控制台调用构造函数,在Web Worker中使用它,或者在非工作中重用代码AngularJS应用程序,你开始不得不解决 AngularJS而不是它.我开始怀疑这种方法是否被误导,因为javascript中的函数似乎已经是"单身人士"并且似乎不需要任何帮助实例化.

我滥用AngularJS工厂了吗?使用暴露于全局范围的构造函数会更好吗?更一般地说,是否存在促使AngularJS工厂/服务/提供商在全球对象上使用的特定因素,反之亦然?

Al *_*hri 6

是!

工厂语法:module.factory('factoryName',function); 结果:当将factoryName声明为injectable参数时,将通过调用传递给module.factory的函数引用来提供返回的值.用法:用于返回一个'class'函数,然后可以用来创建实例.

资料来源:https://groups.google.com/forum/#! msg/ angular/ 56sdORWEoqg/ HuZsOsMvKv4J

以上链接也被用作Bart评论的来源:AngularJS:Service vs provider vs factory