User Object definition in JavaScript

あいかわらずJavaScriptについて色々調べてます。JavaScriptでユーザーオブジェクトを定義するには、つぎのような感じになります。コンストラクタ用の関数を定義して、定義したオブジェクトのprototypeに属性を追加していきます。操作の追加もできます。操作は実体を別に用意しておいて名前で束縛するという感じです。ただし、オブジェクト単位での名前空間は定義されないので、オブジェクト用の属性や操作の実体用に _ で始まる名前は予約しておいて、通常の関数では _ を使わないということを考えたりしないといけません。

// コンストラクタ
function Target() {
}
Target.prototype.name = “Target”
Target.prototype.equals = _target_equals;
Target.prototype.toString = _target_toString;

// このオブジェクトと他のオブジェクトが等しいかどうかを示します。
function _target_equals(obj) {
return obj.toString()==this.name;
}
// 文字列表現を返します。
function _target_toString() {
return this.name;
}

「実装の継承」らしきことを実現することもできるようですが、JavaScriptのオブジェクトに関しては型によるチェックはできないので個人的にはあまり意味がないかなという感じです。せっかく操作の実体を指定できるようになっているので、オブジェクトコンポジションの考え方で拡張していく方が、オブジェクトの役割もわかりやすくなりますから良いと思います。ソースコードが少々長くなりますけど、継承の罠にはまりにくくなるので、保守性は高まると思います。

続きを読む

カテゴリー: etc