オブジェクトの代入ではまった

JavaScriptの動作で不可思議な事象にあたり、バグ探しを・・
最初はロジック的な誤りだと思い、ソースのトレースで探していたのだが
原因がわからず、結局Alertだらけにして動作を追う事になり、
結果すごく単純な原因でした。
var ObjectStruct {
x:0,
y:0,
z:0
}
とこのオブジェクト内容のバックアップを取って後でバックアップを復元しているつもりが・・・
var BackObj = ObjectStruct;
このBackObjは単なる参照にしかなっていなかったという話です。
具体例を以下に、
var G_BackPcImageTmp = {
name: ”,
w: 0,
h: 0
};

var cp = G_BackPcImageTmp;

alert(‘name=’ + cp.name + ‘ w=’ + cp.w + ‘ h=’ + cp.h);
// この結果は、 name= w=0 h=0
// となり、

G_BackPcImageTmp.name = ‘渡辺';
G_BackPcImageTmp.w = 100;
G_BackPcImageTmp.h = 250;

alert(‘name=’ + cp.name + ‘ w=’ + cp.w + ‘ h=’ + cp.h);
//この結果は、最初と同じ出力を期待していたが、。
// name=渡辺 w=100 h= 250となります。

ということで、オブジェクトの代入は注意が必要です。

コメントを残す