js按值访问对象属性而不是通过引用(共享对象调用)

时间:2014-05-05 21:40:40

标签: javascript object

我在对象中调用属性,当我更新这个属性时,属性也是更新。

http://jsfiddle.net/zw8Ag/3/

object = 
{
    path : [1,2,3,4],
    test: function() 
    {
        var destination = this.path;
        destination[3] = 99;
    } 
}

this.path [3]返回99

获取数据的正确方法是什么,而不是参考?

2 个答案:

答案 0 :(得分:1)

因为它指的是没有传递值的引用。

克隆数组:var destination = this.path.slice(0);

演示:http://jsfiddle.net/8Pvj5/

答案 1 :(得分:0)

因为当变量中有对象时,变量不包含对象的数据。相反,它包含对内存中对象数据的引用。

然后,var destination = this.path;只复制引用,而不是数据。如果你修改其中一个变量,两者都会受到影响。

如果要复制对象的数据,可以使用

function extend(obj, props) {
    for(var i in props) if(props.hasOwnProperty(i))
        obj[i] = props[i];
}
var copy = extend({}, obj);

或者您也可以尝试继承:

var copy = Object.create(obj);

或者在这种情况下,因为它是一个数组,所以更好地使用slice

var copy = arr.slice();