gpt4 book ai didi

javascript - 在 AngularJS 中定义服务和工厂的正确方法

转载 作者:行者123 更新时间:2023-11-28 01:09:47 25 4
gpt4 key购买 nike

我阅读了一些 AngularJS 教程,并注意到,每个人都使用稍微不同的方法来定义服务。我想知道最好的方法是什么,或者使用特定方法时可能会出现哪些缺点。

我注意到的第一个区别是使用匿名函数或命名函数:

angular.module('myApp').service('myService', function myService() {
var _var1 = "foo";
var public_methods = {
doSomething: function() {
return "bar";
},
var1: _var1
};
return public_methods;
});

angular.module('myApp').service('myService', function() {
var _var1 = "foo";
var public_methods = {
doSomething: function() {
return "bar";
},
var1: _var1
};
return public_methods;
});
  1. 这两种方法有什么区别吗?
  2. Angular 是否提供 myService 命名函数?怎么办?
<小时/>

第二个区别是定义“公共(public)方法”,例如外部可见的内容:

angular.module('myApp').service('myService', function myService() {
var _var1 = "foo";
var public_methods = {
doSomething: function() {
return "bar";
},
var1: _var1
};
return public_methods;
});

angular.module('myApp').service('myService', function myService() {
var _var1 = "foo";
this.doSomething = function() {
return "bar";
};
this.var1 = _var1
});

第一个返回一个对象,它的作用类似于一个接口(interface),定义了公众可见的内容。第二个,使用 this 定义其方法和属性。

  1. 有什么缺点吗?
  2. 为什么我更喜欢其中一种方法而不是另一种?
<小时/>

第三个区别是定义这样的服务:

var Session = function() {};
Session.prototype.doSomething = function() {
return "bar";
};
Session.prototype.var1 = "foo";
angular.module('myApp').service('myService', Session);

在这里,我只看到一个缺点,即私有(private)变量不能与其他函数共享。但这种方法有什么大的优点吗?我可以想象,对于工厂(而不是服务)来说,性能会更好,因为原型(prototype)函数只需定义一次,而不是每次创建新对象时(因为服务是单例,工厂不是)。

<小时/>

定义和使用工厂:我也不确定以下方法是否是使用工厂时的最佳实践:

angular.module('myApp').factory('User', function() {
var User = function(data) {
angular.extend(this, {
id: null,
email: null,
name: null
}, data);
};
return User;
});

当使用工厂时,我正在编写new User(data)data 与一些默认变量等合并。您对此方法有何看法?有很大的缺点吗?或者我是否以错误的方式使用工厂?

最佳答案

我认为,总的来说,您所要求的大部分内容 - 以及您看到它以不同方式完成的原因 - 是这些都是完全合法的 JavaScript 的风格差异。这里没有真正的最佳实践。

第一个问题 - 没有什么区别。

第二个问题 - 都有效,我个人更倾向于第一个问题,因为它更灵活;您可以使用一些巧妙的技巧来做到这一点,例如对象操作之类的东西。你可能可以对“this”进行所有操作,但我觉得没有必要。再次强调个人喜好。

第三个问题 - 这只是 JavaScript 的一个功能,支持 first class functions 。这只是一种语言功能,最终取决于您喜欢如何设计事物。我内联它们,但将每个服务保存在自己的文件中。我认为你看到人们这样做是因为 Angular Documentation on Services展示他们这样做是因为这样更容易阅读文档。但实际上并没有太大不同。

我对你如何使用该工厂没有问题,但请确保你实际上并不需要 $resource。

关于javascript - 在 AngularJS 中定义服务和工厂的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24608556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com