看起来像一个简单的问题,但这两种方法的MooTools文档看起来完全相同。
以下是文档中的代码:
var firstObj = {
name: 'John',
lastName: 'Doe'
};
var secondObj = {
age: '20',
sex: 'male',
lastName: 'Dorian'
};
Object.append(firstObj, secondObj);
//firstObj is now: {name: 'John', lastName: 'Dorian', age: '20', sex: 'male'};
如果我将append
更改为merge
,我会得到相同的结果。那有什么区别?
答案 0 :(得分:6)
我能看到的唯一区别是append
有两个参数,merge
有两个或更多参数。
阅读方法的源代码,我看到了另一个区别。 merge
方法将克隆其他对象的属性,而append
方法仅复制它们。
因此,如果在某些对象中有一个对象或数组作为属性,那么在使用append
之后,这些对象或数组将可以从原始对象访问:
var firstObj = {
name: 'John',
lastName: [ 'Doe' ]
};
var secondObj = {
age: '20',
sex: 'male',
lastName: [ 'Dorian' ]
};
//Object.merge(firstObj, secondObj);
Object.append(firstObj, secondObj);
console.log(firstObj.lastName[0]); // Dorian
secondObj.lastName[0] = 'McEnroe';
console.log(firstObj.lastName[0]); // McEnroe
如果您使用merge
,furstObj.lastName
中的数组项在更改secondObj.lastName
时不会更改,因为它们不是同一个对象。
小提琴:http://jsfiddle.net/Guffa/PrsXj/
此外,当第二个参数是字符串时,merge
方法有一个重载:
merge(obj, "name", obj2)
这只会将属性obj2.name
复制到obj
,即基本上与merge(obj, { name: obj2.name })
相同。