0
jQueryでディープコピーをテストしていましたが、代わりに空のオブジェクトがあります。jQuery.extend()ディープコピーが期待通りに機能していませんか?
しかし、機能loop2
はコピーを期待どおりに行います(参考として渡します)。
しかし、loop
も拡張/マージされたオブジェクトの参照を取得しませんか?
なぜそれが正解ではありませんか?
var obj1 = { hello: { f: 1 } };
var obj2 = {};
function loop(original, copy) {
copy = $.extend(true, {}, original);
console.log(copy);
}
function loop2(original, copy) {
$.extend(true, copy, original);
console.log(copy);
}
function run() {
loop(obj1, obj2);
console.log(obj2);
loop2(obj1, obj2);
console.log(obj2);
}
出力:
Object {hello: Object}
Object {} ---> why this one did not get the correct content?
Object {hello: Object}
Object {hello: Object}
を。しかし、その奇妙な。変数名と参照のリンクがどのように作成されるのか?私はvar a = {test:1}ならば、 "var a"というものは参照xyzにリンクされていると思うかもしれません...だから、ループ関数上では引数copyをvar aの参照として渡しますloopスコープでは、コピーargには新しい参照が割り当てられます。これは、論理が参照を変更すると考えて、var aがその新しい参照に割り当てられるからです。 – Miguel