Hatena::Groupgeneration1986

tyoro.g86

86世代と全然絡んでない人の日記
 | 

2008-06-04

検証した

21:38

function A(ob){
    this.ob = ob;
}
B= extend(A, function()
{
    this.superclass.constructor(this);
});

a = new Array();
a = new B(1);
b = new B(2);
console.debug(a.ob == b.ob);//true
console.debug(a == b);//false
console.debug(a.ob == b);//true
console.debug(a.ob == b);//true

どう見てもthis共有してます。

ってか親コンストラクタのthisはsuperclassのthisになんのかな?

とりあえず呼び出しを

this.superclass.constructor.apply(this,[this]);

って形にしたら全部falseが帰ってくるようになりますた


inheritで実装してる方もapply使うとスマートになるだろうから、どっち使っても変わらん気もするけど、継承先のclassコンストラクタ内で継承元のclass関数名を書かねばならいあたり、inheritの方が冗長な気がするので、次の実装ではextendに戻すかな。

ただ、extendってJScriptでは将来的な予約語になってるらしいので、関数名変えた方が良さそう。

os0xos0x2008/06/18 13:42だいぶ反応遅いけど、
this.superclass.constructor(this);

this.superclass.constructor.apply(this,arguments);
にすると良い感じかも。

 |