比如说:
var obj1={a:1,b:2};
var obj2;
obj2=obj1 这能说obj2 "引用了"obj1吗?
还是
var obj2={}
obj2.attribute=obj1  这个叫obj2"引用了"obj1?还有一个问题是不是无论obj2=obj1,还是obj2.attribute=obj1  这两个都叫浅拷贝啊?

解决方案 »

  1. 如果将赋值可以看做拷贝的话,那么现在这种情况是浅拷贝,就是说obj2和obj1指向了同一个对象。obj2=obj1 这能说obj2 "引用了"obj1吗?
    可以obj2.attribute=obj1  这个叫obj2"引用了"obj1?
    将偶obj1对象赋给obj2的attribute属性,我感觉这样表达跟准确
      

  2. var obj1={a:1,b:2};
    var obj2;
    obj2=obj1
    我觉得这个不应该叫obj2 "引用了"obj1吧?!
      

  3. 呵呵 xxhhbb1538 我想的和你说的正好反着,我觉得obj2.attribute=obj1  这个叫obj2"引用了"obj1;而obj2=obj1 我觉得将obj1对象的地址赋给obj1这个表达更准些。
      

  4. 其实我现在就想确认下:
    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?
      

  5. 只要是没有变成两个实体,能过地址指向,都可以叫引用 
     obj2引用了obj1?,详细点说obj2 的属性attribute 引用了obj1
      

  6. 去学一门面向对象的语言  c# java之类的
    这些语言里面此类概念很清晰
      

  7. 没有查到javascript的官方定义:浅拷贝
    引用和浅拷贝 没有直接关系看下面的试验代码:
    如果引用就是浅拷贝的话,就复制了在obj1/obj2中的a,就应该2个复制, alert 就不应该显示3
    var obj1={a:1,b:2};
    var obj2;
    obj2=obj1
    obj1.a = 3;
    alert(obj2.a);
      

  8. 其实不管法1,法2.你这样理解对象的引用:
    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的情况同理。上面只是对于对象来说。对于基本类型就不保存内存地址,而直接就是数值本身了。
      

类似问题 »