FlashのSharedObjectをJavaScriptからCallする汎用的なClassを書いててハマった。
SharedObjectなので、ExternalInterfaceによるCallバックを使わないといけない。
なので、値を直接JSには投げられなくて、Proxyさせる必要がある。
いや、投げられるけどかっこ悪い。
var Hoge = function(){}; Hoge.prototype.proxy = "dummy"; Hoge.prototype.get = function(key){ if (this.proxy[key]){ return this.proxy[key]; } }; Hoge.prototype.set = function(key, value){ this.cb.set(key, value); }; Hoge.prototype.cb = { get: function(r){ this.pxory = r; }, set: function(k,v){ console.log(this); this.proxy[k] = v; } }; hoge = new Hoge(); hoge.set('foo', 'bar');
で、こうすると、
this.proxy[k] = v;
の場所でエラーが出る。
しばらく悩んで、このthisってのが何か?これは、hogeと思ってけど、hoge.cbなのね。
なので、Proxyは、Hoge直下ではなくcb.pxoryってのを使ってパイプさせてやらないといけない。