2

単純な質問のように思えますが、これら 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'};

に変更appendするとmerge、同じ結果が得られます。違いは何ですか?

4

1 に答える 1

6

私が見ることができる唯一の違いは、append2 つのパラメーターをmerge取り、2 つ以上のパラメーターを取ることです。

編集:

メソッドのソース コードを読むと、別の違いがわかります。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/

また、merge2 番目のパラメーターが文字列の場合、メソッドにはオーバーロードがあります。

merge(obj, "name", obj2)

obj2.nameこれは、プロパティをにコピーするだけです。objつまり、基本的には と同じmerge(obj, { name: obj2.name })です。

于 2012-09-28T17:51:19.420 に答える