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