我希望在按钮点击事件通过事件参数发生时指定一些值:
$scope.update = function(context) {
$scope.master = context;
};
我已将user
值分配给$scope.master
。
现在我看到了angular.copy()。所以我用angular.copy编写了代码。
$scope.update = function(context) {
$scope.master = angular.copy(context)
};
两者都是一样的,那有什么区别?请告诉我angular.copy()
和equal(=)
之间的区别。
答案 0 :(得分:47)
可以read here angular.copy()
执行参数的深层复制(参见" clone") - 基本上创建一个新对象 - 而使用赋值运算符{{1只需指定引用即可。
因此,在后一种情况下,如果我们要更改=
中的内容,您也会更改$scope.master
。
干杯,
答案 1 :(得分:10)
=
表示引用,而angular.copy()
创建新对象作为深层副本。
使用=
意味着更改context
的属性会更改$scope.master
的相应属性,反之亦然。
使用angular.copy()
两个对象将保持独立,并且更改不会相互反映。
答案 2 :(得分:3)
在Javascript中操作基本类型(如int)时,=
和angular.copy
与复制变量值的任何赋值结果相同。
当您在Javascript中操作对象时,=
将对现有对象的引用分配给变量,angular.copy
正在复制,这意味着创建具有相同属性和值的新对象并分配新对象对象对变量的引用。
答案 3 :(得分:2)
简单地
angular.copy()
与创建&的jquery的.clone()
相同返回与dept相同的对象副本。 (按价值呼叫)
=
它确实为值赋值了它的参考值(通过引用调用),
a = b
将b
值分配给a
,但如果同时a
和b
a
是数组,b
中的更改将反映在{{1}}&反之亦然。
答案 4 :(得分:0)
在分配中,我们共享对象的引用。当我们使用angular.copy时,我们将创建一个具有相同对象详细信息的新参考点。
var user1={name:'hello'};
对象{name:'hello'}
有一个参考点(假设123,该参考点保存在user1中;
当我们写
var user2=var user1; //reference point of user2 is also 123
user2.name="world"; //we update the object in 123
console.log(user1.name); //answer is "world" because reference object is updated
如果在用户2中进行某些更改时不想更新用户1,我们必须创建一个副本。 我们可以做到
var user2=angular.copy(user1);
或
var user2=Object.assign({},user1);