AngularJS:复制与扩展

新手上路,请多包涵

解释 :

我们遇到了一些需要将一个对象复制到另一个对象的情况。在那种情况下,我们可能有两个解决方案: 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) 的问题,因为它创建了一个 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() 的正确流程。

任何直接的帮助都将非常感激。谢谢

原文由 Rohìt Jíndal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 350
2 个回答

我更新 了代码。现在 angular.extends 可以按预期工作。请记住,如果您传递 angular.extends 一个空对象作为第一个参数(目标),然后是源,angular 将保留两个对象并仅复制属性,就像 angular.copy 一样。

 // angular.copy()

var mySource = {'name' : 'sakshi', 'age' : '24', 'obj' :{'key':'value'}}
var myDest = angular.copy(mySource);

mySource.name = "Beta";
console.log(mySource); // Object {name: "Beta", age: "24", obj: Object}
console.log(myDest); // Object {name: "sakshi", age: "24", obj: Object}
console.log(mySource.obj === myDest.obj); // false

// angular.extend()

var mySource = {'name' : 'sakshi', 'age' : '24', 'obj' :{'key':'value'}}
var myDest = angular.extend(mySource);
mySource.name = "Beta";
console.log(mySource); // Object {name: "Beta", age: "24", obj: Object}
console.log(myDest); // Object {name: "Beta", age: "24", obj: Object}
console.log(mySource.obj === myDest.obj); // True

原文由 Rodrigo Juarez 发布,翻译遵循 CC BY-SA 4.0 许可协议

agular.copy 克隆(深拷贝)一个对象并使用相同的值创建一个新对象,而 angular.extend 进行浅拷贝以便属性引用内存中的相同值。 这里 给出了一个非常好的解释,它很好地区分了 .copy().extend().merge() 方法

原文由 Aditya Singh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏