我的工厂应该使用辅助方法返回一个对象还是应该使用原型?

时间:2015-09-08 10:05:31

标签: javascript angularjs

我是角度的初学者,我试着理解我是否应该像这样使用工厂:

app.factory('FoobarServices', ['$http', function ($http) {

    var Foobar = {
        // Model
    };

    return {
        getFoobar: function () {

        },
        setFoobar: function (Foobar) {

        },
        update: function (foobar) {

        },
        delete: function (id)

        }
    };
}]);

或类似的东西:

app.factory('Fooba', ['$http', function($http) {  
    function Foobar(foobar) {
        // Initialize foobar
    };
    Foobar.prototype = {
        getFoobars: function() {

        },
        setFoobar: function(foobar) {

        },
        update: function(foobar) {

        },
        delete: function(id) {

        },
    };
    return Foobar;
}]);

我不确定每种模式的优缺点是什么,哪种更适合角度项目。

你能否告诉我应该使用哪一个?

1 个答案:

答案 0 :(得分:2)

这取决于您希望如何使用您的服务。 Factory通常用于存储一些构造函数,稍后您可以从中实例化一些对象。

例如:

app.factory('Client', function () {
  function Client (name) {
    this.name = name;
  }

  Client.prototype.sayHello = function () {
    console.log('Hello, my name is ' + this.name + '!');
  }

  return Client;
})

.controller('ClientController', function (Client) {
  var bob = new Client('Bob');
})

如果您的服务是单身,则可以将其注册为service而不是factory,而angular会为您创建一个实例。 或者您可以将其注册为工厂,但使用方法返回一些对象。当您不想在服务逻辑中处理上下文(this)时,它非常有用:

app.factory('ClientStorage', function () {

    function set () {
      // to be implemented
    }

    function get () {
      // to be implemented
    }

    return {
      get: get,
      set: set
    };
})