【发布时间】:2016-08-18 02:15:24
【问题描述】:
说明:
我们遇到了一些需要将一个对象复制到另一个对象的情况。在这种情况下,我们可能有两种解决方案:angular.copy() 或 angular.extend()。
我面临的挑战:
我们知道angular.copy(source, destination) 创建源对象的深层副本并将其分配给目标。通过编写深拷贝,我们的意思是制作了引用对象的新副本并且它工作正常。
深拷贝代码:
var mySource = {'name' : 'Beta', 'age' : '24'}
var myDest = {}
angular.copy(mySource,myDest);
mySource.name = "Alpha";
console.log(mySource); // Object {name: "Alpha", age: "24"}
console.log(myDest); // Object {name: "Beta", age: "24"}
console.log(mySource.obj === myDest.obj); // false
在这里,我修改了源对象mySource.name = "Alpha",但它并没有像预期的那样影响目标对象myDest。
如果我们检查mySource.obj === myDest.obj,这将给出错误,因为两者都指向不同的对象。
现在,我遇到了angular.extend(destination, source) 的问题,因为它创建了一个shallow copy,这意味着源和目标都将指向同一个地址。 So, if i will modify source object then it will also reflect in destination object. But it's not happening.
浅拷贝代码:
var mySource = {'name' : 'Beta', 'age' : '24'}
var myDest = {}
angular.extend(myDest,mySource);
mySource.name = "Alpha";
console.log(mySource); // Object {name: "Alpha", age: "24"}
console.log(myDest); // Object {name: "Beta", age: "24"}
console.log(mySource.obj === myDest.obj); // True
jsfiddle:https://jsfiddle.net/U3pVM/24322/
由于我是新手,需要帮助来理解 angular.copy() 和 angular.extend() 的正确流程。
任何直接的帮助都将是非常可观的。谢谢
【问题讨论】:
标签: javascript angularjs deep-copy shallow-copy