解释:
我们在一些情况下需要将一个对象复制到另一个对象中。在这种情况下,我们可能有两个解决方案: 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
,会得到false,因为它们指向不同的对象。现在,我正在使用
angular.extend(destination, source)
时遇到问题,因为它创建一个浅拷贝,这意味着源和目标都将指向同一个地址。所以,如果我修改源对象,那么它也会反映在目标对象中。但是这并没有发生。
浅拷贝代码:
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()的正确使用方法。
如有任何紧急帮助将不胜感激。谢谢。
angular.extend
对于内部对象使用相同的引用),而你的总结则陈述了另一件事情。 - greenoldman