这是JS:
angular.module('app', [])
.controller('fooCtrl', function($scope){
var fooProto = {
arrayItems: [],
addItem: function(){
var self = this;
self.arrayItems.push(new Date());
}
};
$scope.fooes = [];
$scope.foo1 = angular.extend({}, fooProto);
$scope.foo2 = angular.extend({}, fooProto);
});
如何逃避? 谢谢!
答案 0 :(得分:2)
因为你有一个拥有数组的对象
var fooProto = {
arrayItems: [],
addItem: function(){
var self = this;
self.arrayItems.push(new Date());
}
};
Array是一种引用类型。因此,当您复制对象时,它会复制属性,如果属性是引用类型,则复制引用
$scope.foo1 = angular.extend({}, fooProto);
$scope.foo1
获取参考文献的副本,它们都引用同一个对象。因此,您使用两个引用来处理同一个对象,这两个引用引用相同的array
。
您可以使用constructor-function
function foo(){
this.arrayItems = [];
this.addItem = function(){
this.arrayItems.push(new Date());
}
}
var foo1 = new foo();
var foo2 = new foo();
在这里,您将有两个foo
个实例,每个实例都有自己的arrayItems
。
在您的情况下,您不需要复制项目,因为据我所知,您这样做是为了不复制,而是创建'type'的新实例。