Javascript 角度js服务/工厂属性行为

Javascript 角度js服务/工厂属性行为,javascript,angularjs,service,controller,Javascript,Angularjs,Service,Controller,我有一个关于AngularJS行为(一般的JS行为)的问题 我有一个角度工厂注入控制器 下面是控制器代码的一段 $scope.localObjCollection= myObjFactorySvc.getObjCollection(); 假设myObjFactorySvc.getObjCollection()返回以下对象 [{"id":1"name":null,"address":null,"email":null}, {"id":2"name":null,"address":null,"em

我有一个关于AngularJS行为(一般的JS行为)的问题

我有一个角度工厂注入控制器

下面是控制器代码的一段

$scope.localObjCollection= myObjFactorySvc.getObjCollection();
假设myObjFactorySvc.getObjCollection()返回以下对象

[{"id":1"name":null,"address":null,"email":null},
{"id":2"name":null,"address":null,"email":null},
{"id":3"name":null,"address":null,"email":null},
{"id":4"name":null,"address":null,"email":null},
]
因此,我基本上是使用工厂来获取集合并将其存储在
$scope.localObjCollection
中。 我的问题是
$scope.localObjCollection
是否具有
getObjCollection()
返回的数据的值(副本),或者只是一个引用

如果在控制器源代码中的某个地方,如果我
$scope.localObjCollection.push(newObj)
,它是否也会更新工厂中的原始集合?我猜应该是这样,但我想了解正确的行为

JavaScript中的数组是一个对象,JS中的对象总是通过引用传递/分配的。因此,假设myObjFactorySvc.getObjCollection()如下所示,代码还将更新工厂中的原始集合:

myObjFactorySvc.getObjCollection = function() { return someArrayVariable; }

好的,如果它是一个对象,它应该是一个引用,但是如果它是一个值,它就是一个副本。因此,它应该更新原始集合。您可以使用
angular.copy
克隆集合。这里有一个小演示,向您展示了不同之处:由于工厂是单例的,因此您可以轻松地在应用程序中共享数据。如果您希望共享数据的副本,返回集合时,可以在
getObjCollection
中使用
angular.copy