2

似乎是一个简单的问题,但是这两种方法的 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'};

如果我更改appendmerge,我会得到相同的结果。那么有什么区别呢?

4

1 回答 1

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改为使用,则更改时数组项 infurstObj.lastName不会更改secondObj.lastName,因为它们不是同一个对象。

小提琴:http: //jsfiddle.net/Guffa/PrsXj/

此外,merge当第二个参数是字符串时,该方法具有重载:

merge(obj, "name", obj2)

那只会将属性复制obj2.nameobj,即与 基本相同merge(obj, { name: obj2.name })

于 2012-09-28T17:51:19.420 回答