是否有一种简单的方法可以将一个对象的属性复制到另一个对象中。
例如
var a = {
afunc: function(bla) {
alert('hello ' + bla);
},
avalue: 'aaa'
};
var b = {
bfunc: function(blb) {
alert('hi ' +blb);
},
bvalue: 'bbb'
};
magically_copy_a_to_b(a,b);
b.afunc('world');
应打印hello world
答案 0 :(得分:1)
枚举a的属性,然后在b处设置属性。注意:对象通过引用传递,不复制。
复制:
copiedArray = array.slice()
复制数组array
copiedFunc = eval(originalFunc.toString())
function magically_copy_a_to_b(a,b){
for(var prop in a){
/* Example: copying all string properties*/
if(typeof prop[a] == "string"){
b[prop] = prop[a];
}
}
}
答案 1 :(得分:0)
我认为你制造了很多混乱,无论如何我纠正了你的对象(没有var和use :),这可以通过枚举一个对象的属性并将它们添加到另一个对象(避免原型链)来实现。 p>
function magically_copy_a_to_b(org, dest){
for (var prop in org){
if (org.hasOwnProperty(prop)){
dest[prop] = org[prop];
}
}
return dest;
}
var a = {
afunc: function(bla) {
alert('hello ' + bla);
},
avalue: 'aaa'
};
var b = {
bfunc: function(blb) {
alert('hi ' +blb);
},
bvalue: 'bbb'
};
b = magically_copy_a_to_b(a,b);
b.afunc('world');
答案 2 :(得分:0)
答案 3 :(得分:0)
此方法将json对象的属性永久添加到另一个对象。因为JS是一种脚本语言,所以“eval”函数可以用更短的代码来节省时间!最后,我正在使用json,因为在“for(ob obj2 in obj2)”中它返回定义到obj1中的每个键,并且在更大的代码中处理json比使用简单数组更有趣。例如,对json对象数组进行排序非常容易,而且你不必使用邪恶的“i”来获取它。
function magically_copy_properties(jsonFrom,jsonTo) {
for (var key in jsonFrom) {
eval([
"jsonTo.",key,"=jsonFrom.",key
].join(""));
}
}
var a = {
"a1": function() {
return "hello";
},
"a2": function() {
return "hey";
},
"aSpace": function() {
return " ";
}
}
var b = {
"b1": function() {
return "ho";
},
"b2": function() {
return "world";
}
}
magically_copy_properties(a,b);
alert(b.a1() + b.aSpace() + b.b2());