tohokuaikiのチラシの裏

技術的ネタとか。

prototype内のthisはその一個上のを指さない

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ってのを使ってパイプさせてやらないといけない。