2012-04-13 8 views
0

関数から、元のオブジェクトに影響を与えずに(つまり、副作用がなく)、引数として渡されたオブジェクトの修正バージョンを返すことを望みます。だから本質的に私は価値を渡したい。私はオブジェクトの(深い)コピーされたバージョンを変更して返すことによってこれをやろうとしました。しかし、私は今クローンオブジェクトに対して行った変更が依然としてオリジナルに影響を与えていることを発見しました。値で渡すためにオブジェクトのJavaScriptをコピーする

以下のコードスニペットは、私がこの問題を回避するにはどうすればよいoldObject

var clone = function(oldObject) { 
    return jQuery.extend(true, {}, oldObject); 
} 

var objf = function() { 
    var data = {list:[1],dic:{a:'3'}}; 
    this.modifyMyData = function() { 
     data.list.push(3); 
     data.dic['e'] = 10; 
    } 
    this.getData = function() { 
     return data; 
    } 
} 

var old = new objf; 
var newo = clone(old); 
newo.modifyMyData(); 

のデータに影響を与えるのnewObjectにmodifyMyDataを呼び出すように、これを示していますか?

答えて

1

これを試してみてくださいあなたが望むように動作すると思います。変数データをオブジェクトに添付する必要があります。あなたがそれをやっていたやり方は、クロージャーを使って変数に変換したので、コピーされませんでした。

var clone = function(oldObject) { 
    return jQuery.extend(true, {}, oldObject); 
} 

var objf = function() { 
    this.data = {list:[1],dic:{a:'3'}}; 

    this.modifyMyData = function() { 

     this.data.list.push(3); 
     this.data.dic['e'] = 10; 
    } 
    this.getData = function() { 
     return this.data; 
    } 
} 

var old = new objf(); 
var newo = clone(old); 
newo.modifyMyData(); 
関連する問題