現在のプロジェクトで John Resig の継承実装を使用していますが、サブクラスが親のクロージャ変数も継承 (アクセス) する方法があるかどうか疑問に思っていました...
たとえば、次のクラスを作成します
var Foo = (function() {
var p = "im p";
var Foo = Class.extend({
getp : function() {
return p;
}
});
return Foo;
})();
これで、Foo クラスはクロージャー内の変数 p にアクセスできるようになりました。Fooのサブクラスもそうです...
var Bar = Foo.extend({});
var bar = new Bar;
bar.getp(); // "im p"
bar.getp は p にアクセスできる Foo.getp を呼び出すだけなので、これは当然のことです。ただし、bar.getpを上書きすると
var Bar = Foo.extend({
getp : function() {
return p;
}
});
bar.getp() を実行すると、bar にアクセスできないため、p is undefined がスローされます
p を bar にアクセスできるようにするいくつかの方法を考えていますが、少し扱いにくいと思います。これを実現する最もクリーンな方法だと思います。