我有一些麻烦来理解复制的内容和javascript中引用的内容。我清楚的是,当一个对象是一个对象时会被引用,当一个对象是一个变量时会被复制:
var reference = myObject // myObject = {string:'text'} -> referenced
var copy = myVar // myVar = 'text' -> copied
现在如果我想创建一个对象/ var?
的对象怎么办?var newObject = {anObject: myObject, aVar: myVar}
他们会被复制或引用吗?如果它们被复制,有没有办法让它们被引用(至少是对象:myObject)?
编辑(Angularjs特定):我想确保AngularJS和$ rootScope变量的所有答案都是正确的(尽管我猜行为应该相同)
答案 0 :(得分:1)
对象引用是 值。因此,对象的行为就像它们传递的一样 reference:如果函数更改了对象属性,则会更改 原始价值。对象属性的更改是可见的(反映) 在功能之外。
如果将对象分配给另一个对象的属性,它仍然通过引用分配。当你更改新的对象值时,它反映在base。
例如:
var myObj = {
a: 1
}
var testObj = {
ref: myObj
}
console.log(myObj.a); //1
//change the value from second object
testObj.ref.a = "new val";
console.log(myObj.a); //new val
答案 1 :(得分:1)
复制原始值并引用非原始值(如对象和数组)。 我认为" myObject"将被引用,myVar将被复制。要获取myObject的副本,您可以克隆它并将其分配给另一个变量。
使用JQuery:
{
anObject: $.extend({},myObject),
aVar: myVar
}