如何不通过引用传递值到同一个对象属性?

时间:2011-08-23 16:52:11

标签: javascript

function A(){}
var B = {};

var a1 = new A();
var a2 = new A();
var b1 = B;
var b2 = b1;

A.prototype.prop = "A's Property";
b1.prop = "B's Property";
a1.prop = "Not Prop";
alert (a1.prop + " not equal to " + a2.prop);
b2.prop = "Not Prop";
alert (b1.prop +" still equal to "+ b2.prop);

如您所见,b2.prop无法通过值传递,如何在不更改属性名称的情况下传递值?

3 个答案:

答案 0 :(得分:3)

您是否在询问如何为b1提供b2prop个不同的值?因为你这样做的方式,你做不到。 b1b2引用同一个对象。您必须为每个对象创建一个新对象。

var b1 = {};
var b2 = {};
// b1 and b2 can have independent prop values now

答案 1 :(得分:0)

您要将b2分配给b1,这只是对B的引用。

如果您希望他们拥有不同的属性包,则必须将b2分配给b1的克隆。

答案 2 :(得分:0)

定义克隆方法:

function clone(o) {
    if(!o || 'object' !== typeof o)  {
        return o;
    }
    varc = 'function' === typeof o.pop ? [] : {};
    var p, v;
    for (p in o) {
        if (o.hasOwnProperty(p)) {
            v = o[p];
            if (v && 'object' === typeof v) {
                c[p] = clone(v);
            } else {
                c[p] = v;
            }
        }
    }
    return c;
}

然后用它来克隆你的b1对象:

var b1 = B;
var b2 = clone(b1);