以下の記事で述べたアイデアはいちおう実現できたかな。まー、習作ですけど。
やってみて感じたこと、反省など: 「JavaScriptと、ある種のツリー構造 (2)」で次のように述べました。
通常のノードとブランクは異なりますが似ています。こういう「異なるが似てる、似てるが異なる」ものを表現するとき、いくつかの方法があります。
- 同じクラスの(JavaScriptでは同じコンストラクターを持つ)インスタンスだが、フラグで区別する。
- スーパークラスとサブクラスのインスタンスとする。
- 同じスーパークラスから継承された2つの異なるサブクラスのインスタンスとする。
フラグを使うと、フラグのチェックが煩雑になりがちです。
確かに、フラグを使うとチェックが面倒なのですが、今回はフラグでも良かったかな、という気もします。オブジェクトを別なクラスとして区別したので、instanceof で条件分岐をしているところがあって、これがどうも具合が悪い。instanceof の右辺にクラス名が生で出てきちゃって、拡張性/保守性の障害になります。new の後に書くクラス名にも同様の問題があります。
上記の問題に幾分かは対処したのですが、中途半端です。クラス分けをしないでフラグ(あるいはタグ)を使う方法ってのも面白そうだし、実用性もあると思うのですが、今回はクラス分けにしちゃったので、次の機会(あれば)にフラグっぽいやり方を試してみます。