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无法通过值传递,如何在不更改属性名称的情况下传递值?
答案 0 :(得分:3)
您是否在询问如何为b1
提供b2
和prop
个不同的值?因为你这样做的方式,你做不到。 b1
和b2
引用同一个对象。您必须为每个对象创建一个新对象。
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);