この手法だと JavaScript の instanceof は使えないんじゃないかしら / “How CoffeScript classes work - Islands in the byte stream” http://t.co/ewSffSPz
2012-03-10 22:31:33@__gfx__ prototype OO 的には、プロトタイプオブジェクトは一意に決まるはずなので、クラス定義構文を var Derived = new Base(args).extend({ /* classdef */ }); とすれば代理 ctor 不要
2012-03-10 22:36:14@__gfx__ それ coffeescript の instanceof が .prototype を比較するみたいな実装になってるとかじゃなくて?
2012-03-10 22:37:50@kazuho そのnew Base(args)...のargsを自動的に決められないので代理ctorが必要ってことじゃないんです?
2012-03-10 22:38:09@__gfx__ 必ず決まるよ。スーパークラスの初期化関数を呼び出すことと、プロトタイプが何か一意に決まってるっていうことは、両立可能でしょ
2012-03-10 22:40:49スーパークラスのパラメータを、プロトタイプと異なる値に初期化したければ Super.call(this, args...); すればいいだけの話
2012-03-10 22:42:19@kazuho それって function C(args) { this.__proto__ = new P(args) } のとき、argsは必ず決まるってことですか。問題は__proto__がECMA262標準じゃないってことですが。
2012-03-10 22:44:05純粋な prototype OO にコンストラクタはないのよ。ただ JS は必ず new Foo() って初期化関数を呼び出す制約をいれてるだけ。Foo 自体は通常の関数なので、Foo.apply(this, ..) とかしたっていい
2012-03-10 22:47:57new Foo() される Foo は通常の関数なので、Foo.prototype から「変更する」値だけセットすればいい。それが prototype-based ってこと
2012-03-10 22:48:37@kazuho そもそも https://t.co/yii0lPdG がクラス定義の話なのかインスタンス生成の話なのかよくわかりません><
2012-03-10 22:51:41@__gfx__ prototype-base に忠実に書くなら、こういう感じになるってこと https://t.co/2ucALB9M
2012-03-10 22:54:13JS のインスタンス生成が new funccall() って関数呼び出しを伴うのは prototype-based OO としては違和感あるけど、オブジェクトがリファレンスである以上、しょうがない感じもしてる。プロパティが配列だったりするとインスタンス毎に初期化せざるを得ないし
2012-03-10 22:56:07@kazuho ああわかりました!でもこれ、たとえばBaseがfdなどの外部リソースを確保するようなものだとやっぱり代理ctorが必要になりません?
2012-03-10 22:56:20