Sco*_*pey 2 javascript mootools
看起来像一个简单的问题,但这两种方法的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'};
Run Code Online (Sandbox Code Playgroud)
如果我换append到merge,我会得到相同的结果.那有什么区别?
我能看到的唯一区别是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
Run Code Online (Sandbox Code Playgroud)
如果使用merge,则furstObj.lastName更改时数组项不会更改secondObj.lastName,因为它们不是同一个对象.
小提琴:http://jsfiddle.net/Guffa/PrsXj/
此外,merge当第二个参数是字符串时,该方法有一个重载:
merge(obj, "name", obj2)
Run Code Online (Sandbox Code Playgroud)
这只会复制的属性obj2.name来obj,即基本相同merge(obj, { name: obj2.name }).