以前、JSONのstringify の 第二引数の話を書いた。
そういえば、完成形を書いてない。
関数も含めてシリアライズしてコピーする。
var a = { name: "takuya", say: function() { console.log( this.name ) }, tel : { name:'iphone', display: function(){ console.log(this.name) } } } var str = JSON.serialize(a) var b = JSON.deserialize(str) b.say() // => takuya
serialize/ deserialize はこれ。
//serialize/deserialize ツール JSON.serialize = function(obj){ try{ var str = JSON.stringify(obj, function replacer (k,v){ if(typeof v === "function"){ return v.toString() }; return v ; }) return str }catch(e){ return ""; } } JSON.deserialize=function(str){ try{ var obj = JSON.parse( str ,function reciever (k,v ) { if ( typeof v === "string" && v.match(/^function/) ){ return Function.call(this, "return "+ v )(); } return v }) return obj; }catch(e){ return null } }
こういうの、公式にアレば良いんだけどなかったんだっけ?