比如说:
var obj1={a:1,b:2};
var obj2;
obj2=obj1 这能说obj2 "引用了"obj1吗?
还是
var obj2={}
obj2.attribute=obj1 这个叫obj2"引用了"obj1?还有一个问题是不是无论obj2=obj1,还是obj2.attribute=obj1 这两个都叫浅拷贝啊?
var obj1={a:1,b:2};
var obj2;
obj2=obj1 这能说obj2 "引用了"obj1吗?
还是
var obj2={}
obj2.attribute=obj1 这个叫obj2"引用了"obj1?还有一个问题是不是无论obj2=obj1,还是obj2.attribute=obj1 这两个都叫浅拷贝啊?
可以obj2.attribute=obj1 这个叫obj2"引用了"obj1?
将偶obj1对象赋给obj2的attribute属性,我感觉这样表达跟准确
var obj2;
obj2=obj1
我觉得这个不应该叫obj2 "引用了"obj1吧?!
var obj1={a:1,b:2};
var obj2;
obj2=obj1;法二:
var obj1={a:1,b:2};
var obj2={}
obj2.attribute=obj1;是法一叫obj2引用了obj1,还是法二叫obj2引用了obj1?
obj2引用了obj1?,详细点说obj2 的属性attribute 引用了obj1
这些语言里面此类概念很清晰
引用和浅拷贝 没有直接关系看下面的试验代码:
如果引用就是浅拷贝的话,就复制了在obj1/obj2中的a,就应该2个复制, alert 就不应该显示3
var obj1={a:1,b:2};
var obj2;
obj2=obj1
obj1.a = 3;
alert(obj2.a);
var obj1={a:1,b:2}; -> 创建了变量boj1,它保存了一个内存地址(xxx)。这个内存地址(即可理解为引用)里存放的就是{a:1,b:2}。
var obj2; -> 创建了变量obj2.但它没有保存任何内存地址。
obj2=obj1; -> 将obj1保存的内存地址赋值给obj2。此时obj2也就保存了相同的内存地址(xxx)。
这样当系统不论在调用obj1还是obj2时都通过他们保存的内存地址去找他们所指的对象。对于法2里的attribute的情况同理。上面只是对于对象来说。对于基本类型就不保存内存地址,而直接就是数值本身了。