2012年8月20日月曜日

Javascript の オブジェクトの操作。

なんか別な事しようと思ってハマッたっつか、面白いから調べてみたよ。

var obj = {foo:"moge"};
var dat = obj;
obj.foo = "bar";

obj = "";
alert(dat.foo); // <- undefined とかを期待したのに、bar って出る。
alert(obj.foo); // <- こっちはundefined と出る。おいおい。


というわけで、こうしなきゃだめ。

var obj = {foo:"moge"};
var dat = obj;
obj.foo = "bar";

obj.foo = undefined;
alert(dat.foo); // <- undefined
alert(obj.foo); // <- undefined

なんか、当たり前のコードになった。
なんか、これ、腑に落ちないよねー。
それが出来るんなら、なんで最初のは undefined にならねーんだっつー話ですよ。
まぁいいか。つか、おかげでなんか今まで書いたコードでメモリ食う理由がわかった気もする。

あと、調べてわかったことは、 var obj ってしたら、 delete(obj) って出来ないということ。
グローバル変数じゃないと、delete 演算子は仕事をしないっつーことのようです。
基本らしいのだけど、基本を知りません。ワタクシ。Oh! No.
 http://nanto.asablo.jp/blog/2008/01/09/2552470#jsdel-target

ここを読むと良くわかりました。

【削除されない見本】
 var obj = {foo:"moge"};
 var dat = obj;
 obj.foo = "bar";

 delete(obj); // <- 削除されない
 alert(dat.foo); // <- bar
 alert(obj.foo); // <- bar

かーらーの、

【削除される見本】
 obj = {foo:"moge"};
 var dat = obj;
 obj.foo = "bar";

 delete(obj); // <- 削除される
 alert(dat.foo); // <- こっちは bar が出る。
 alert(obj.foo); // <-エラーになって alert が出ない。

Javascript の オブジェクトとかは参照渡し!とはいえ、
参照元のオブジェクト自体を削除しても、参照先のプロパティも削除されるわけではなく、
どっちかというと、ギリギリ前に参照していた内容がコピーされる、ということかなぁ?


0 件のコメント:

コメントを投稿