0

グローバルな方法で定義されたオブジェクトを取得しました。

window.myobj = {};

次に、新しい要素が追加され、最後に関数ごとに ajax を介してデータベースに保存されSaveData(obj)ます。問題は、短期間に何度も作成していることです。関数に渡されているのは1つのオブジェクトへのポインターのみであるように見えるため、別のイベントが発生すると、保存関数内で変更されます。外に変更しました。PHPでは、それを使用する必要があり&$objます...では、関数に渡されるobjが単なるポインターではないように、適切に行うにはどうすればよいですか?

編集:問題はここに現れました:

そう言いましょうevent = {time:123,type:blah}

function SaveData(event){
  obj = jQuery.extend({}, event); // doesn't seem to replicate event
  $.post('save',obj,function(res){
    if(res) console.log(obj);
  });
  if(obj.type == 'blah'){
     newobj = jQuery.extend({}, obj);
     newobj.type = 'newtype';
     newobj.time = 234;
     SaveData(newobj);
  }else if(obj.type == 'newtype'){
     newobj = jQuery.extend({}, obj);
     newobj.type = 'lasttype';
     newobj.time = 345;
     SaveData(newobj);  
  }
}

これは、同じ 3 つのオブジェクトを返します。

{time:345,type:lasttype}
4

2 に答える 2

0

オブジェクトに関数が含まれておらず、値とその他のオブジェクトのみが含まれていると仮定すると、オブジェクトmyobjを複製する (したがってポインターの問題を取り除く) 1 つの非常に簡単な方法は次のようになります。

var clonedObj = JSON.parse(JSON.stringify(window.myobj));

clonedObjこれで、をSaveData関数に渡すことができます。

于 2013-09-17T08:42:51.323 に答える