Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的工厂应该返回带有帮助器方法的对象,还是应该使用prototype?_Javascript_Angularjs - Fatal编程技术网

Javascript 我的工厂应该返回带有帮助器方法的对象,还是应该使用prototype?

Javascript 我的工厂应该返回带有帮助器方法的对象,还是应该使用prototype?,javascript,angularjs,Javascript,Angularjs,我是angular的初学者,我试图了解我是否应该使用这样的工厂: app.factory('FoobarServices', ['$http', function ($http) { var Foobar = { // Model }; return { getFoobar: function () { }, setFoobar: function (Foobar) { },

我是angular的初学者,我试图了解我是否应该使用这样的工厂:

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;
}]);
我不确定每种模式的优缺点,以及哪一种更适合角度项目


你能告诉我应该使用哪一种吗?

这取决于你想如何使用你的服务。 工厂通常用于存储一些构造函数,以后可以从中实例化一些对象

例如:

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');
})
如果您的服务是单例服务,您可以将其注册为
服务
,而不是
工厂
,angular将为您创建一个实例。 或者您可以将其注册为工厂,但返回一些带有方法的对象。当您不想在服务逻辑中处理上下文(
)时,它非常有用:

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

    function set () {
      // to be implemented
    }

    function get () {
      // to be implemented
    }

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

根据经验法则,
工厂
不应返回方法。工厂用于返回
对象
。如果只想返回方法,则应使用
service
:)对于单例对象,不应使用原型。