var = {};(function(x){ var obj = x;obj.foo = 'foo';obj.bar = 'bar';})(o)
o
.bar
__.
.bar
__.
var o= {};函数克隆( x) { for(p in X) thisp = (typeof(xp) == 'object')?新克隆(Xp):xp;} (function(x){ var obj = new Clone(x);obj.foo = 'foo';obj.bar = 'bar';})(o)
o
.bar
__.不会支持 .foo
或
问题
发布于 2011-09-28 02:48:14
不怎么有意思。
根据您的实际需要,一种可能是将o
设置为新对象的原型。
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
因此,您添加到obj
中的任何属性都不会添加到o
中。添加到obj
中且与o
中的属性同名的任何属性都将隐藏o
属性。
当然,任何添加到o
中的属性都将在obj
中可用,前提是这些属性没有被屏蔽,并且在原型链中具有o
的所有对象都将看到对o
的相同更新。
此外,如果obj
具有引用另一个对象的属性,如数组,则在将成员添加到对象之前,您需要确保隐藏该对象,否则,这些成员将被添加到obj
中,并将在原型链中具有obj
的所有对象之间共享。
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
在这里您可以看到,因为您没有使用obj
上的baz
属性来隐藏o
上baz
处的数组,所以o.baz
数组会被修改。
因此,您需要首先对其进行隐藏:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined
发布于 2014-06-18 04:50:17
请查看此答案https://stackoverflow.com/a/5344074/746491。
简而言之,如果您的对象可以序列化为JSON.parse(JSON.stringify(obj))
,那么json是复制对象的一种快速方法。
发布于 2011-09-28 02:55:46
下面是克隆函数,它将执行对象的深度复制:
function clone(obj){
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = new obj.constructor();
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
现在你可以像这样使用:
(function(x){
var obj = clone(x);
obj.foo = 'foo';
obj.bar = 'bar';
})(o)
https://stackoverflow.com/questions/7574054
复制相似问题